
【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が実行ロールを引き受ける典型的な連携パターン
| 実行ロールを介して連携するサービス | 実行ロールにアタッチするポリシー |
|---|---|
| EMR | elasticmapreduce:DescribeCluster elasticmapreduce:ListInstanceGroups |
| CloudWatch Logs | logs:CreateLogGroup logs:CreateLogStream logs:DescribeLogStreams logs:PutLogEvents |
| CloudWatch Metrics | cloudwatch:PutMetricData |
| Glue Data Catalog | glue: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 |
| S3 | s3:ListBucket s3:GetObject s3:PutObject s3:DeleteObject s3:GetBucketLocation s3:ListBucketMultipartUploads s3:AbortMultipartUpload s3:GetObjectVersion |
| DynamoDB | dynamodb:CreateTable dynamodb:GetItem dynamodb:PutItem dynamodb:UpdateItem dynamodb:DeleteItem dynamodb:Query dynamodb:Scan dynamodb:DescribeTable dynamodb:BatchGetItem dynamodb:BatchWriteItem |
| EC2 | ec2:CreateTags ec2:DescribeVolumes ec2:DescribeNetworkInterfaces ec2:DescribeInstances ec2:DescribeSecurityGroups ec2:DescribeSubnets ec2:DescribeVpcs |
| Kinesis Data Streams | kinesis:GetRecords kinesis:GetShardIterator kinesis:DescribeStream kinesis:ListShards kinesis:DescribeStreamSummary kinesis:PutRecord kinesis:PutRecords |
| Secrets Manager | secretsmanager:GetSecretValue secretsmanager:DescribeSecret |
| SSM Parameter Store | ssm:GetParameter ssm:GetParameters |
| KMS | kms: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 | クラスターログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| HDFSBytesRead | HDFS読み取りバイト |
| HDFSBytesWritten | HDFS書き込みバイト |
| TotalLoad | YARN総負荷 |
| CPUUtilization | CPU使用率 |
| ContainerAllocatedGB | 割当メモリGB |
| ContainerAllocatedVcores | 割当vCPU |
| HDFSUtilization | HDFS使用率 |
| MemoryAvailableMB | 利用可能メモリ |
| YARNMemoryAvailablePercentage | YARNメモリ空き率 |
| IsIdle | アイドル状態か |
制限値(固定値/ハードリミット/ソフトリミット)
| ハードリミット | 制限値 |
|---|---|
| アクティブインスタンスグループ数/クラスター | 50 |
| ソフトリミット | 制限値 |
|---|---|
| クラスターあたりのノード数 | 2,000 |
| アクティブクラスター数/リージョン | 500 |
| ステップ数/クラスター | 256(アクティブ)、30,000(合計) |
AWS CLIのサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| インスタンス時間 | EMRで使用するEC2インスタンスの時間 |
| EMR料金 | EC2料金に加えてEMRの追加料金 |