改めてAmazon EMRを触った際の備忘録
以下のSpark ETLのWorkshop触ってのポイントまとめ
https://emr-etl.workshop.aws/spark_etl/steps.html
対応フレームワーク
Hadoop、Spark、Presto、Hive、Flink などのビッグデータ処理フレームワークやクエリエンジンのほか、TensorFlow、MXNet、Mahout などの機械学習系、Jupyter、Zeppelinなどのノートブックなどなど様々
EMR クラスタデプロイパターン
オプションは大きく分けて3つ
[1] EMR on EC2
- 上記豊富なフレームワークから選べる標準的な使い方
- 基本はマスターノード・コアノード ・タスクノードで構成
- ノードタイプを固定する
Uniformインスタンスグループ
と、スポットインスタンスを組み合わせてコスト最適化戦略が組めるインスタンスフリート
から選択
[2] EMR on EKS
- Apache Spark on Kubernetesな使い方
- 既存EKS(k8s)のリソースの有効活用ができる
- https://aws.amazon.com/jp/blogs/news/new-amazon-emr-on-amazon-elastic-kubernetes-service-eks/
[3] EMR Serverless
- 2022/6 に GA
- https://aws.amazon.com/jp/about-aws/whats-new/2022/06/amazon-emr-serverless-generally-available/
インタラクティブ操作用インターフェース
※ EMR on EC2 の Spark編
オプションは大きく分けて4つ
[1] Terminal
[2] JupyterHub/Zeppelin Notebook
[3] EMRノートブック
- EMR機能として提供するサーバーレスのJupyterLab環境 (またはJupyterNotebook)
- EMR ノートブック自体の内容(ノートブックセル内の方程式、クエリ、モデル、コード、ナラティブテキスト)はクライアントで実行され、コマンドは EMR クラスター上のカーネルを使用して実行される
- 作成済みのEMRクラスターを指定して立ち上げるか、クラスタの作成も可能
- ターゲットとするEMRクラスタをアタッチデタッチで切り替えられる
- ノートブックの内容はS3にも保存される
- 標準的にインタラクティブに利用するならコレ
[4] EMR Studio
- JupyterLabを中心とする統合開発環境(IDE)
-
Studio
の配下にWorkspace
を作る(WorkspaceごとにEMRノートブック(JupyterLab)が自動作成される) - 複数のユーザでのコラボレーションと、データサイエンティストやデータエンジニアのワークフローを想定した各種機能をパッケージ化したイメージ
- SSOにも対応しており、マネコンログインせずに外部ID認証での利用も可能
EMR Studioセットアップメモ)
EMR StudioはSSOを利用せずIAM認証でも利用できる。
他の機能より事前準備が色々必要なため簡単にメモ
EMR Studioに設定するIAM ROLEとIAM User用のポリシー、SecurityGroupなどが必要。
既存のVPCを利用する場合に最低限必要な追加リソースは、下記GitHubのCloufFormationスタックで作成できる。
min_studio_dependencies.yml
https://github.com/aws-samples/emr-studio-samples
なお、ターゲットとするVPCとサブネットには、「for-use-with-amazon-emr-managed-policies = true
」タグの設定が必要。(これの設定漏れでハマった)
全体的な流れは以下動画にまとまってある
https://www.youtube.com/watch?v=E8HxMnjz5JI
ジョブの実行
※ Spark編
オプションは大きく分けて2つ
[1] EMR ステップAPI
- ステップとは、EMRのAPIを利用して送信されるジョブの単位
- マネコンか、AWS CLI経由で実行できる
- ステップは基本シーケンシャル実行だが、Concurrency(同時実行数)を2〜256で変更できる
- あらかじめS3に格納したJarファイル(PySparkの場合はPythonスクリプトファイル)を指定してサブミットする
[2] spark-submit
クラスタの終了
オプションは大きく分けて3つ
※クラスタ保護オプションに注意
[1] マネコンまたはTerminateJobFlows API
で明示的に削除する
[2] クラスタ作成時のパラメータで、指定した稼働時間後にアイドル状態の場合に自動終了
するオプションあり
[3] ステップAPIでジョブをサブミットし完了時に自動終了
するオプションもある
ログの確認方法
[1] Terminal で実行した場合は標準出力
[2] 各種アプリケーションUI
ジョブ実行のオーケストレーション
主なオプション
- Apache Oozie(EMRでセットアップ可能)
- Apache Airflow(MWAAを利用)
- AWS Step Functions