Kubernetes 上の Spark の Data Jobs Monitoring
Data Jobs Monitoring は、Kubernetes 上の Apache Spark アプリケーションのパフォーマンスと信頼性を視覚化します。
セットアップ
以下の手順に従って、Kubernetes 上の Spark に対して Data Jobs Monitoring を有効にしてください。
- Kubernetes クラスターに Datadog Agent をインストールします。
- Spark インスツルメンテーションを注入します。
Datadog Agent を Kubernetes クラスターにインストールする
すでに Datadog Agent を Kubernetes クラスターにインストールしている場合は、Datadog Admission Controller が有効になっていることを確認してください。 確認できたら、次の手順である Spark インスツルメンテーションの注入に進みます。
Datadog Agent は、Datadog Operator または Helm を使用してインストールできます。
前提条件
インストール
次のコマンドを実行して、Datadog Operator をインストールします。
helm repo add datadog https://helm.datadoghq.com
helm install my-datadog-operator datadog/datadog-operator
Datadog の API キーを保存する Kubernetes Secret を作成します。
kubectl create secret generic datadog-secret --from-literal api-key=<DATADOG_API_KEY> --from-literal app-key=<DATADOG_APP_KEY>
次の構成を含むファイル、datadog-agent.yaml
を作成します。
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
features:
apm:
enabled: true
hostPortConfig:
enabled: true
hostPort: 8126
admissionController:
enabled: true
mutateUnlabelled: false
global:
tags:
- 'data_workload_monitoring_trial:true'
site: <DATADOG_SITE>
credentials:
apiSecret:
secretName: datadog-secret
keyName: api-key
appSecret:
secretName: datadog-secret
keyName: app-key
override:
nodeAgent:
image:
tag: <DATADOG_AGENT_VERSION>
env:
- name: DD_DJM_CONFIG_ENABLED
value: "true"
<DATADOG_SITE>
を、ご使用の Datadog サイトに置き換えます。ご使用のサイトは
です (右側で正しいサイトが選択されていることを確認してください)。
<DATADOG_AGENT_VERSION>
をバージョン 7.55.0
以降に置き換えます。
上記のコンフィギュレーションファイルを使用して Datadog Agent をデプロイします。
kubectl apply -f /path/to/your/datadog-agent.yaml
Datadog の API キーを保存する Kubernetes Secret を作成します。
kubectl create secret generic datadog-secret --from-literal api-key=<DATADOG_API_KEY> --from-literal app-key=<DATADOG_APP_KEY>
次の構成を含むファイル、datadog-values.yaml
を作成します。
datadog:
apiKeyExistingSecret: datadog-secret
appKeyExistingSecret: datadog-secret
site: <DATADOG_SITE>
apm:
portEnabled: true
port: 8126
tags:
- 'data_workload_monitoring_trial:true'
env:
- name: DD_DJM_CONFIG_ENABLED
value: "true"
agents:
image:
tag: <DATADOG_AGENT_VERSION>
clusterAgent:
admissionController:
enabled: true
muteUnlabelled: false
<DATADOG_SITE>
を、ご使用の Datadog サイトに置き換えます。ご使用のサイトは
です (右側で正しいサイトが選択されていることを確認してください)。
<DATADOG_AGENT_VERSION>
をバージョン 7.55.0
以降に置き換えます。
次のコマンドを実行します。
helm install <RELEASE_NAME> \
-f datadog-values.yaml \
--set targetSystem=<TARGET_SYSTEM> \
datadog/datadog
Spark インスツルメンテーションの注入
Spark ジョブを実行する際には、以下の構成を使用します。
spark.kubernetes.{driver,executor}.label.admission.datadoghq.com/enabled
(必須)true
spark.kubernetes.{driver,executor}.annotation.admission.datadoghq.com/java-lib.version
(必須)latest
spark.{driver,executor}.extraJavaOptions
-Ddd.data.jobs.enabled=true
(必須)true
-Ddd.service
(オプション)- サービス名です。このオプションは Datadog 内の_ジョブ名_を設定するため、人間が読める名前を使用することをお勧めします。
-Ddd.env
(オプション)prod
や dev
などの環境。-Ddd.version
(Optional)- お使いのバージョン。
-Ddd.tags
(オプション)- 追加したいその他のタグ。
<KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>
の形式で入力してください。
例: spark-submit
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master k8s://<CLUSTER_ENDPOINT> \
--conf spark.kubernetes.container.image=895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.10.0:latest \
--deploy-mode cluster \
--conf spark.kubernetes.namespace=<NAMESPACE> \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=<SERVICE_ACCOUNT> \
--conf spark.kubernetes.authenticate.executor.serviceAccountName=<SERVICE_ACCOUNT> \
--conf spark.kubernetes.driver.label.admission.datadoghq.com/enabled=true \
--conf spark.kubernetes.executor.label.admission.datadoghq.com/enabled=true \
--conf spark.kubernetes.driver.annotation.admission.datadoghq.com/java-lib.version=latest \
--conf spark.kubernetes.executor.annotation.admission.datadoghq.com/java-lib.version=latest \
--conf spark.driver.extraJavaOptions="-Ddd.data.jobs.enabled=true -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.data.jobs.enabled=true -Ddd.service=<JOB_NAME> -Ddd.env=<ENV> -Ddd.version=<VERSION> -Ddd.tags=<KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>" \
local:///usr/lib/spark/examples/jars/spark-examples.jar 20
例: AWS start-job-run
aws emr-containers start-job-run \
--virtual-cluster-id <EMR_CLUSTER_ID> \
--name myjob \
--execution-role-arn <EXECUTION_ROLE_ARN> \
--release-label emr-6.10.0-latest \
--job-driver '{
"sparkSubmitJobDriver": {
"entryPoint": "s3://BUCKET/spark-examples.jar",
"sparkSubmitParameters": "--class <MAIN_CLASS> --conf spark.kubernetes.driver.label.admission.datadoghq.com/enabled=true --conf spark.kubernetes.executor.label.admission.datadoghq.com/enabled=true --conf spark.kubernetes.driver.annotation.admission.datadoghq.com/java-lib.version=latest --conf spark.kubernetes.executor.annotation.admission.datadoghq.com/java-lib.version=latest --conf spark.driver.extraJavaOptions=\"-Ddd.data.jobs.enabled=true -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.data.jobs.enabled=true -Ddd.service=<JOB_NAME> -Ddd.env=<ENV> -Ddd.version=<VERSION> -Ddd.tags=<KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>\""
}
}
検証
Datadog で Data Jobs Monitoring ページを表示すると、すべてのデータ処理ジョブのリストが表示されます。
高度な構成
ランタイムでのタグスパン
ランタイムで Spark スパンにタグを設定できます。これらのタグは、タグが追加された後に開始するスパンにのみ適用されます。
// 次のすべての Spark 計算のタグを追加します
sparkContext.setLocalProperty("spark.datadog.tags.key", "value")
spark.read.parquet(...)
ランタイムタグを削除するには
// 次のすべての Spark 計算のタグを削除します
sparkContext.setLocalProperty("spark.datadog.tags.key", null)
その他の参考資料