Cloud Service
Amazon EMR
SparkやHadoopなどのビッグデータ基盤を、AWSがマネージドするクラスタ上で実行できる分散処理サービス。
- 1.Spark/Hadoop/Hive/Prestoなどのクラスタ構築と運用をAWSに任せられる。
- 2.ストレージはS3に分離し、必要なときだけクラスタを起動して処理する。
- 3.スポットや自動スケールでコストを抑え、用途でEC2/EKS/Serverlessを選ぶ。
解決する課題
Spark や Hadoop のクラスタを自前で構築しようとすると、サーバーの調達、分散フレームワークのインストールと設定、バージョン整合、スケーリング、障害対応に多くの工数がかかります。Amazon EMR はこれらを肩代わりします。
- ビッグデータ基盤のクラスタを数分で起動し、不要になれば破棄できる
- フレームワーク(Spark/Hive/Presto/HBase など)の導入・設定をマネージド化
- データ量や処理量に応じてノードを自動で増減できる
- ストレージを S3 に分離し、コンピュートを使う分だけに抑えられる
主要概念と用語
- クラスタ: 処理を担う EC2 インスタンス(ノード)の集合。1回の起動単位
- ノードタイプ: クラスタ全体を統括するマスター(プライマリ)、計算と保存を担うコア、計算のみを担うタスクの3種
- アプリケーション: クラスタに導入するフレームワーク。Spark、Hadoop(MapReduce/YARN)、Hive、Presto/Trino、HBase、Flink など
- ステップ: クラスタに投入する処理ジョブの単位
- EMRFS: EMR から S3 をファイルシステムのように扱う仕組み。HDFS の代わりに S3 を永続ストレージにできる
- インスタンスフリート / インスタンスグループ: ノードの台数やインスタンスタイプ、購入オプションをまとめて管理する方式
- デプロイ形態: EC2 上で動かす標準形態のほか、Kubernetes で動かす EMR on EKS、クラスタ管理不要の EMR Serverless がある
仕様・制限・クォータ
- リージョン内の VPC・サブネットにクラスタを配置する。1クラスタは原則として単一の AZ に展開される
- マスターノードは通常1台で、可用性を高める構成も選べる。コア/タスクノードは複数台にスケール可能
- 起動するインスタンス数は EC2 の vCPU クォータに従い、上限引き上げを申請できる
- 利用できるアプリケーションのバージョンは EMR リリースラベルごとに束ねられている。具体的なバージョン番号はリリースにより変動するため、利用時に最新の対応表を確認する
- クラスタは**長時間稼働(常設)にも、処理が終わると自動終了する一時クラスタ(トランジェント)**にもできる
内部の仕組み
EMR はクラスタを EC2 インスタンス上に構築し、各ノードに選択したアプリケーションを配置します。マスターノードが YARN などのリソース管理を通じてジョブを各ノードに割り当て、コア/タスクノードが分散処理を実行します。
- コアノードは HDFS のデータ保持を兼ねるため、減らしすぎるとデータ消失のおそれがある。タスクノードは計算専用で、安全に増減できる
- 永続データは EMRFS 経由で S3 に置き、HDFS は一時的な中間データに使うのが一般的。これによりクラスタを破棄してもデータが残る(ストレージとコンピュートの分離)
- EMR on EKS は既存の Kubernetes クラスタ上で Spark ジョブを実行し、EKS のリソースと共存させられる
- EMR Serverless はクラスタのサイジングや起動を意識せず、ジョブ実行に必要な容量を自動で確保する
コアノードは HDFS のデータを保持するため縮小に注意が必要です。スケールやスポット活用は計算専用のタスクノードで行うのが安全です。
設計パターン / ベストプラクティス
- ストレージはS3、コンピュートは使い捨て: 永続データを EMRFS で S3 に逃がし、処理ごとに一時クラスタを起動・破棄する
- タスクノードにスポット: 中断を許容できる計算は安価なスポットで賄い、コアノードはオンデマンド/予約で安定させる
- オートスケール / マネージドスケーリング: 負荷に応じてノードを自動増減し、待ち時間と無駄を抑える
- ジョブ特性で形態を選ぶ: 細かい運用制御が要るなら EC2、Kubernetes 基盤に寄せたいなら EMR on EKS、断続的なジョブなら EMR Serverless
- ブートストラップアクションでノード起動時に共通設定やライブラリを投入し、再現性を保つ
運用・監視
- CloudWatch でクラスタやノードのメトリクス(CPU、メモリ、HDFS 使用率、保留中のコンテナ数など)を監視する
- アプリケーションのログは S3 へ自動アーカイブする設定にしておくと、クラスタ破棄後も調査できる
- Spark/YARN の **Web UI(履歴サーバー含む)**でジョブの実行状況やボトルネックを確認する
- 一時クラスタは処理完了後の自動終了を有効にし、消し忘れによる課金を防ぐ
コスト
- 課金は主にEC2 インスタンスの稼働時間に、EMR の利用料が上乗せされる形が基本(EMR on EKS や Serverless は課金体系が異なる)
- コスト最適化の要点は、使う分だけ起動・即破棄、タスクノードのスポット活用、right-sizing と自動スケール
- 変動する具体的な単価は公式の料金ページで確認する
常設クラスタは起動している間ずっと EC2 料金が発生します。断続的な処理は一時クラスタ+自動終了、または EMR Serverless が無駄を減らしやすい構成です。
セキュリティ
- IAM ロールでクラスタやノード、EMRFS から S3 などへのアクセスを最小権限に制御する
- データは保存時暗号化(S3/EBS、鍵は KMS)と転送時の TLS で保護する
- クラスタは VPC のプライベートサブネットに置き、セキュリティグループで通信を絞る
- 複数ユーザーでクラスタを共有する場合は、ユーザー単位のアクセス制御(細粒度アクセス制御や Lake Formation 連携など)を検討する
アクセスキーをノード内に直接置くのは避けてください。**IAM ロール(EMRFS のロールマッピング含む)**を使えば、鍵の管理・漏洩リスクを排除できます。
Well-Architected の観点
- パフォーマンス効率: 用途に合うインスタンスタイプ選定、自動スケール、適切なフレームワーク選択
- コスト最適化: 一時クラスタの即破棄、タスクノードのスポット、S3 分離による無駄の削減
- 信頼性: 重要データは S3 に永続化し、クラスタ自体は使い捨てにできる設計にする
- セキュリティ: 最小権限の IAM ロール、暗号化、プライベートサブネット配置
試験で問われるポイント
- 「マネージドな Spark/Hadoop クラスタ」と来たら EMR
- コアノード=HDFS 保持(縮小注意)/タスクノード=計算専用(スポット向き)
- 永続データは EMRFS で S3 に分離し、クラスタは使い捨てにする
- クラスタ運用を避けたい断続ジョブは EMR Serverless、Kubernetes 基盤なら EMR on EKS
関連サービス・比較
サーバーレスでクエリやETLを行う Athena/Glue とよく比較されます。クラスタを制御したい大規模・反復的な処理は EMR、運用を最小化したいアドホックな処理はサーバーレス系が向きます。
| 観点 | EMR | Athena / Glue |
|---|---|---|
| 実行基盤 | Spark/Hadoop等のクラスタを制御 | フルマネージド・サーバーレス |
| 向く処理 | 大規模・反復・細かな調整が必要 | アドホックな分析や軽量ETL |
| 運用負荷 | クラスタ管理が必要(形態で軽減可) | クラスタ管理は不要 |
| 課金 | 主にインスタンス稼働時間 | スキャン量やジョブ実行時間が中心 |
ハンズオン / CLI例
# Spark 入りの一時クラスタを起動し、処理完了後に自動終了させる例
aws emr create-cluster \
--name "demo-spark" \
--release-label emr-7.0.0 \
--applications Name=Spark \
--instance-groups \
InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m5.xlarge \
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m5.xlarge \
--use-default-roles \
--log-uri s3://my-emr-logs/ \
--auto-terminate
# クラスタの一覧(起動中・待機中のみ)
aws emr list-clusters --active
AWS Service
Amazon EMRを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
分析
比較で見る軸
クラウド: AWS / カテゴリ: 分析 / 難易度: intermediate
導入後に効く点
ストレージはS3に分離し、必要なときだけクラスタを起動して処理する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 分析
- 難易度
- intermediate
- 関連資格
- DEA-C01
- 設計柱
- performance / cost
判断チェックリスト
- 自社の用途が「分析 / performance」に近いか確認する。
- 強みである「Spark/Hadoop/Hive/Prestoなどのクラスタ構築と運用をAWSに任せられる。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。