Amazon EMR で Spark の Data Jobs Monitoring を有効にする

Join the Beta!

Data Jobs Monitoring は非公開ベータ版です。ウェイティングリストに参加するには、このフォームにご記入ください。

Request Access

Data Jobs Monitoring は、Amazon EMR 上の Apache Spark アプリケーションのパフォーマンスと信頼性を視覚化します。

計画と使用

以下の手順に従って、Amazon EMR の Data Jobs Monitoring を有効にしてください。

  1. AWS Secrets Manager に Datadog API キーを保存します。
  2. EMR クラスターを作成および構成します。
  3. EMR EC2 インスタンスプロファイルへの API アクセスを許可します。
  4. Spark アプリケーションごとにサービスタグ付けを指定します。

AWS Secrets Manager に Datadog API キーを保存する

  1. Datadog API キーをメモします。
  2. AWS Secrets Manager で、Store a new secret を選択します。
    • Secret type で、Other type of secret を選択します。
    • Key/value pairs の下に、Datadog API キーをキーと値のペアとして追加します。ここで、キーは dd_api_key です。
      AWS Secrets Manager の「Store a new secret」。'Key/value pairs' というセクション。左側には、'dd_api_key' を含むテキストボックス。右側には、削除された API キーを含むテキストボックス。
    • その後、Next をクリックします。
  3. Configure secret ページで、Secret name を入力します。datadog/dd_api_keyを使用できます。次に、Next をクリックします。
  4. Configure rotation ページでは、オプションで自動回転をオンにすることができます。次に、Next をクリックします。
  5. Review ページで、シークレットの詳細を確認します。次に、Store をクリックします。
  6. AWS Secrets Manager で、作成したシークレットを開きます。Secret ARN をメモします。

EMR クラスターの作成と構成

Amazon EMR コンソールで新しい EMR クラスターを作成する際、Create Cluster ページにブートストラップアクションを追加します。

  1. この init スクリプトを EMR クラスターが読み込める S3 バケットに保存します。このスクリプトへのパスをメモします。
  2. Create Cluster ページで、Bootstrap actions セクションを見つけます。Add をクリックして、Add bootstrap action ダイアログを表示します。
    Amazon EMR コンソール、Create Cluster、Add Bootstrap Action ダイアログ。名前、スクリプトの場所、引数のテキストフィールド。
    • Name には、ブートストラップアクションの名前を指定します。datadog_agent を使うことができます。
    • Script location には、init スクリプトを S3 に保存した場所へのパスを入力します。
    • Arguments には、Datadog サイトと、Datadog API キーを保存したシークレットの名前の 2 つの引数をスペースで区切って入力します。 例:
       datadog/dd_api_key
      
    • Add bootstrap action をクリックします。

クラスターが作成されると、このブートストラップアクションによって Datadog Agent がインストールされ、クラスターの各ノードに Java トレーサーがダウンロードされます。

EMR EC2 インスタンスプロファイルに API アクセスを許可する

  1. Amazon EMR コンソールで、新しく作成したクラスターのサマリーページを開きます。クラスターの IAM role for instance profile をメモします。

    また、この値を調べるには、以下を実行します。

    aws emr describe-cluster --cluster-id <YOUR_CLUSTER_ID>
    

    出力から Ec2InstanceAttributes.IamInstanceProfile を探します。

  2. AWS IAM コンソールで、左のナビゲーションバーにある Access management > Roles をクリックします。

  3. 前のステップで見たインスタンスプロファイルをクリックします。

  4. 次のページの Permissions タブで、Permissions policies セクションを見つけます。Add permissions > Create inline policy をクリックします。

  5. Specify permissions ページで、Select a service セクションを見つけます。Service で、Secrets Manager を選択します。

    AWS IAM コンソール、Specify Permissions ページ。

    • 次に、Actions allowedGetSecretValue を選択します。これは Read アクションです。

    • Resources で、Specific を選択します。次に、Secret の隣にある、Add ARNs をクリックし、このページの最初のステップで作成したシークレットの ARN を追加します。

    • Next をクリックします。

  6. 次のページで、ポリシーに名前を付けます。次に、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)

その他の参考資料

お役に立つドキュメント、リンクや記事: