EMR

【VPC内リージョンサービス】

EMR(Elastic MapReduce) は、マネージドな Apache Spark / Hadoop / Hive / HBase / Flink / Presto / Hue / Zeppelin などのフレームワークをサポートするビッグデータ分析基盤です。

大規模な ETL / データ変換 / バッチ処理 / ストリーム処理 を柔軟に実行でき、データの集計・加工・解析を効率的に行うことができます。

S3 / Glue Data Catalog / Redshift / Athena / DynamoDB / RDS / Kinesis / CloudWatch Logs などのAWSサービスと連携し、統合的なデータ分析環境を構築できます。特に、HDFS / EMRFS / S3連携(データレイク統合) により、S3をHadoopストレージとして利用し、スケーラブルで低コストなデータレイクを運用できます。

セキュリティ面では、Kerberos認証 や IAM / KMS / VPC暗号化 に対応しており、安全なデータ処理を実現します。

クラスタライフサイクル管理 により、クラスターの作成・実行・終了を自動化し、スポットインスタンス や Auto Scaling を活用することでコスト最適化も可能です。

開発環境としては、Jupyter / EMR Studio / EMR Notebooks / AWS CLI / SDK が利用でき、データサイエンスや分析ジョブの開発・デバッグを効率的に行えます。

EMR Serverless により、クラスターを管理せずにジョブ単位でリソースを自動割り当てできるため、運用負荷を大幅に削減できます。

重要用語

クラスタライフサイクル管理
EMR Serverless
関連サービス

ユースケース

大規模バッチ分析(Hadoop/Spark)大量のログやトランザクションデータをHadoopやSparkを用いて分散処理し、集約・統計・機械学習前処理などを行う。
機械学習ワークロードの分散処理Spark MLlibやその他のライブラリを使い、学習データの前処理や特徴量生成、大規模モデルのトレーニングをクラスタ上で並列実行する。
オンプレHadoop環境のクラウド移行既存のオンプレミスHadoopクラスターをEMRに移行し、ジョブ定義やツールは活かしつつインフラ運用負荷を削減する。

ベストプラクティス

オートスケーリングの利用ワークロードに応じてクラスターサイズを自動調整する。
スポットインスタンス活用中断許容ジョブではスポット混在でコストを削減する。
セキュアクラスター設定Kerberosや暗号化でHadoopクラスターを保護する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・マスターノード(プライマリノード)
 ・コアノード
 ・HDFS データレプリケーション
 ・ストレージ層
 ・メタデータストア
 ・ネットワーク
 ・タスクノード
【自動バックアップ】なし
 生データ・中間データ・結果データを S3 に置く、EMRクラスターは割り切る
【自動リトライ】ジョブ単位 / タスク単位 / ノード単位
 クラスタ内で実行されるジョブが障害などにより失敗した場合に、自動リトライする

セキュリティ

関連サービス設定内容
Subnet(公開リソースと内部リソースの分離)【EMRノード】
 Privateの専用Subnet
SG(リソース単位のアクセス制御)【EMRノード】
 インバウンド:22(SSH)
        9443(EMR Web UI)
        8088(ResourceManager UI)
        19888(JobHistory)
        8080(Spark History Server)
 アウトバウンド:すべて許可
KMS(データの暗号化と鍵の安全管理)【HDFSやS3出力データの暗号化が必要】
 独自KMSキーを使うことを推奨(鍵操作、監査)
Secrets Manager(機密情報の安全管理)シークレット(秘密情報)の作成が推奨
 Spark/Hiveジョブが外部アクセスする認証情報
SSM Parameter Store(設定情報の一元管理)パラメータ(Parameter)の作成が推奨
 スクリプト引数や構成設定
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
クラスター設定変更履歴・セキュリティ構成/暗号化準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
クラスター作成/削除のAPI異常検知

EMRが実行ロールを引き受ける典型的な連携パターン

実行ロールを介して連携するサービス実行ロールにアタッチするポリシー
EMRelasticmapreduce:DescribeCluster
elasticmapreduce:ListInstanceGroups
CloudWatch Logslogs:CreateLogGroup
logs:CreateLogStream
logs:DescribeLogStreams
logs:PutLogEvents
CloudWatch Metricscloudwatch:PutMetricData
Glue Data Catalogglue:GetDatabase
glue:GetDatabases
glue:GetTable
glue:GetTables
glue:GetPartition
glue:GetPartitions
glue:CreateDatabase
glue:CreateTable
glue:CreatePartition
glue:BatchCreatePartition
glue:UpdateDatabase
glue:UpdateTable
glue:UpdatePartition
glue:DeleteTable
glue:DeletePartition
glue:BatchDeletePartition
S3s3:ListBucket
s3:GetObject
s3:PutObject
s3:DeleteObject
s3:GetBucketLocation
s3:ListBucketMultipartUploads
s3:AbortMultipartUpload
s3:GetObjectVersion
DynamoDBdynamodb:CreateTable
dynamodb:GetItem
dynamodb:PutItem
dynamodb:UpdateItem
dynamodb:DeleteItem
dynamodb:Query
dynamodb:Scan
dynamodb:DescribeTable
dynamodb:BatchGetItem
dynamodb:BatchWriteItem
EC2ec2:CreateTags
ec2:DescribeVolumes
ec2:DescribeNetworkInterfaces
ec2:DescribeInstances
ec2:DescribeSecurityGroups
ec2:DescribeSubnets
ec2:DescribeVpcs
Kinesis Data Streamskinesis:GetRecords
kinesis:GetShardIterator
kinesis:DescribeStream
kinesis:ListShards
kinesis:DescribeStreamSummary
kinesis:PutRecord
kinesis:PutRecords
Secrets Managersecretsmanager:GetSecretValue
secretsmanager:DescribeSecret
SSM Parameter Storessm:GetParameter
ssm:GetParameters
KMSkms:Encrypt
kms:Decrypt
kms:GenerateDataKey
kms:DescribeKey
kms:CreateGrant
※)権限設計の原則

信頼ポリシー: EMR

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "elasticmapreduce.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ログ・監視

ログ出力先ログの種類
CloudWatch Logsクラスターログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
HDFSBytesReadHDFS読み取りバイト
HDFSBytesWrittenHDFS書き込みバイト
TotalLoadYARN総負荷
CPUUtilizationCPU使用率
ContainerAllocatedGB割当メモリGB
ContainerAllocatedVcores割当vCPU
HDFSUtilizationHDFS使用率
MemoryAvailableMB利用可能メモリ
YARNMemoryAvailablePercentageYARNメモリ空き率
IsIdleアイドル状態か

制限値(固定値/ハードリミット/ソフトリミット)

ハードリミット制限値
アクティブインスタンスグループ数/クラスター50

ソフトリミット制限値
クラスターあたりのノード数2,000
アクティブクラスター数/リージョン500
ステップ数/クラスター256(アクティブ)、30,000(合計)

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
インスタンス時間EMRで使用するEC2インスタンスの時間
EMR料金EC2料金に加えてEMRの追加料金
料金計算ツール

公式ページ

AWSドキュメント EMR