Amazon EMR で Spark の Data Jobs Monitoring を有効にする
Join the Beta!
Data Jobs Monitoring は非公開ベータ版です。ウェイティングリストに参加するには、このフォームにご記入ください。
Request AccessData Jobs Monitoring は、Amazon EMR 上の Apache Spark アプリケーションのパフォーマンスと信頼性を視覚化します。
計画と使用
以下の手順に従って、Amazon EMR の Data Jobs Monitoring を有効にしてください。
- AWS Secrets Manager に Datadog API キーを保存します。
- EMR クラスターを作成および構成します。
- EMR EC2 インスタンスプロファイルへの API アクセスを許可します。
- Spark アプリケーションごとにサービスタグ付けを指定します。
AWS Secrets Manager に Datadog API キーを保存する
- Datadog API キーをメモします。
- AWS Secrets Manager で、Store a new secret を選択します。
- Secret type で、Other type of secret を選択します。
- Key/value pairs の下に、Datadog API キーをキーと値のペアとして追加します。ここで、キーは
dd_api_key
です。 - その後、Next をクリックします。
- Configure secret ページで、Secret name を入力します。
datadog/dd_api_key
を使用できます。次に、Next をクリックします。 - Configure rotation ページでは、オプションで自動回転をオンにすることができます。次に、Next をクリックします。
- Review ページで、シークレットの詳細を確認します。次に、Store をクリックします。
- AWS Secrets Manager で、作成したシークレットを開きます。Secret ARN をメモします。
EMR クラスターの作成と構成
Amazon EMR コンソールで新しい EMR クラスターを作成する際、Create Cluster ページにブートストラップアクションを追加します。
- この init スクリプトを EMR クラスターが読み込める S3 バケットに保存します。このスクリプトへのパスをメモします。
- Create Cluster ページで、Bootstrap actions セクションを見つけます。Add をクリックして、Add bootstrap action ダイアログを表示します。
- Name には、ブートストラップアクションの名前を指定します。
datadog_agent
を使うことができます。 - Script location には、init スクリプトを S3 に保存した場所へのパスを入力します。
- Arguments には、Datadog サイトと、Datadog API キーを保存したシークレットの名前の 2 つの引数をスペースで区切って入力します。
例:
- Add bootstrap action をクリックします。
クラスターが作成されると、このブートストラップアクションによって Datadog Agent がインストールされ、クラスターの各ノードに Java トレーサーがダウンロードされます。
EMR EC2 インスタンスプロファイルに API アクセスを許可する
Amazon EMR コンソールで、新しく作成したクラスターのサマリーページを開きます。クラスターの IAM role for instance profile をメモします。
また、この値を調べるには、以下を実行します。
aws emr describe-cluster --cluster-id <YOUR_CLUSTER_ID>
出力から Ec2InstanceAttributes.IamInstanceProfile
を探します。
AWS IAM コンソールで、左のナビゲーションバーにある Access management > Roles をクリックします。
前のステップで見たインスタンスプロファイルをクリックします。
次のページの Permissions タブで、Permissions policies セクションを見つけます。Add permissions > Create inline policy をクリックします。
Specify permissions ページで、Select a service セクションを見つけます。Service で、Secrets Manager を選択します。
次のページで、ポリシーに名前を付けます。次に、Create policy をクリックします。
Spark アプリケーションごとにサービスタグ付けを指定する
タグを付けることで、Datadog でのテレメトリーのフィルタリング、集計、比較が容易になります。Spark ドライバーとエグゼキューターの extraJavaOptions
プロパティに -Ddd.service
、-Ddd.env
、-Ddd.version
、-Ddd.tags
オプションを渡すことでタグを構成できます。
Datadog で、各ジョブの名前は -Ddd.service
に設定した値に対応します。
spark-submit \
--conf spark.driver.extraJavaOptions="-Ddd.service=<JOB_NAME> -Ddd.env=<ENV> -Ddd.version=<VERSION> -Ddd.tags=<KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>" \
--conf spark.executor.extraJavaOptions="-Ddd.service=<JOB_NAME> -Ddd.env=<ENV> -Ddd.version=<VERSION> -Ddd.tags=<KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>" \
application.jar
検証
Datadog で Data Jobs Monitoring ページを表示すると、すべてのデータ処理ジョブのリストが表示されます。
ランタイムでのタグスパン
You can set tags on Spark spans at runtime. These tags are applied only to spans that start after the tag is added.
// Add tag for all next Spark computations
sparkContext.setLocalProperty("spark.datadog.tags.key", "value")
spark.read.parquet(...)
To remove a runtime tag:
// Remove tag for all next Spark computations
sparkContext.setLocalProperty("spark.datadog.tags.key", null)
その他の参考資料