Data Jobs Monitoring para Spark en Kubernetes
Este producto no es compatible con el
sitio Datadog seleccionado. (
).
Data Jobs Monitoring ofrece visibilidad del rendimiento y la fiabilidad de las aplicaciones Apache Spark en Kubernetes.
Ajustes
Sigue estos pasos para habilitar Data Jobs Monitoring para Spark en Kubernetes.
- Instalar el Datadog Agent en tu clúster de Kubernetes.
- Inyectar la instrumentación de Spark.
Instalar el Datadog Agent en tu clúster de Kubernetes
Si ya has instalado el Datadog Agent en tu clúster de Kubernetes, asegúrate de que has habilitado el Datadog Admission Controller. A continuación, puedes ir al siguiente paso, Inyectar la instrumentación de Spark.
Puedes instalar el Datadog Agent utilizando el Datadog Operador o Helm.
Requisitos previos
Instalación
Instala el Datadog Operator ejecutando los siguientes comandos:
helm repo add datadog https://helm.datadoghq.com
helm install my-datadog-operator datadog/datadog-operator
Crea un secreto de Kubernetes para almacenar tu clave de API de Datadog.
kubectl create secret generic datadog-secret --from-literal api-key=<DATADOG_API_KEY>
Sustituye <DATADOG_API_KEY>
por tu clave de API de Datadog.
Crea un archivo, datadog-agent.yaml
, que contenga la siguiente configuración:
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
features:
apm:
enabled: true
hostPortConfig:
enabled: true
hostPort: 8126
admissionController:
enabled: true
mutateUnlabelled: false
# (Optional) Uncomment the next three lines to enable logs collection
# logCollection:
# enabled: true
# containerCollectAll: true
global:
site: <DATADOG_SITE>
credentials:
apiSecret:
secretName: datadog-secret
keyName: api-key
override:
nodeAgent:
image:
tag: <DATADOG_AGENT_VERSION>
Sustituye <DATADOG_SITE>
por tu sitio de Datadog. Tu sitio es
. (Asegúrate de seleccionar el SITIO correcto a la derecha).
Sustituye <DATADOG_AGENT_VERSION>
por la versión 7.55.0
o posterior.
Opcional: Anula los comentarios de la sección logCollection
para comenzar a recopilar logs de aplicación que se correlacionarán con las trazas de ejecución del trabajo de Spark. Una vez habilitados, los logs se recopilan de todos los contenedores detectados por defecto. Consulta la documentación de recopilación d elogs de Kubernetes para más detalles sobre el proceso de configuración.
Despliega el Datadog Agent con el archivo de configuración anterior:
kubectl apply -f /path/to/your/datadog-agent.yaml
Crea un secreto de Kubernetes para almacenar tu clave de API de Datadog.
kubectl create secret generic datadog-secret --from-literal api-key=<DATADOG_API_KEY>
Sustituye <DATADOG_API_KEY>
por tu clave de API de Datadog.
Crea un archivo, datadog-values.yaml
, que contenga la siguiente configuración:
datadog:
apiKeyExistingSecret: datadog-secret
site: <DATADOG_SITE>
apm:
portEnabled: true
port: 8126
# (Optional) Uncomment the next three lines to enable logs collection
# logs:
# enabled: true
# containerCollectAll: true
agents:
image:
tag: <DATADOG_AGENT_VERSION>
clusterAgent:
admissionController:
enabled: true
muteUnlabelled: false
Sustituye <DATADOG_SITE>
por tu sitio de Datadog. Tu sitio es
. (Asegúrate de seleccionar el SITIO correcto a la derecha).
Sustituye <DATADOG_AGENT_VERSION>
por la versión 7.55.0
o posterior.
Opcional: Anula los comentarios de la sección de logs para comenzar a recopilar logs de aplicación que se correlacionarán con las trazas de ejecución del trabajo de Spark. Una vez habilitados, los logs se recopilan de todos los contenedores detectados por defecto. Consulta la documentación de recopilación d elogs de Kubernetes para más detalles sobre el proceso de configuración.
Ejecuta el siguiente comando:
helm install <RELEASE_NAME> \
-f datadog-values.yaml \
--set targetSystem=<TARGET_SYSTEM> \
datadog/datadog
Sustituye <RELEASE_NAME>
por el nombre de tu versión. Por ejemplo, datadog-agent
.
Sustituye <TARGET_SYSTEM>
por el nombre de tu sistema operativo. Por ejemplo, linux
o windows
.
Inyectar la instrumentación de Spark
Cuando ejecutes tu trabajo de Spark, utiliza las siguientes configuraciones:
spark.kubernetes.{driver,executor}.label.admission.datadoghq.com/enabled
(obligatorio)true
spark.kubernetes.{driver,executor}.annotation.admission.datadoghq.com/java-lib.version
(obligatorio)latest
spark.{driver,executor}.extraJavaOptions
-Ddd.data.jobs.enabled=true
(obligatorio)
: true
-Ddd.service
(opcional)
: tu nombre de servicio. Debido a que esta opción establece el nombre de trabajo en Datadog, es recomendado que utilices un nombre legible por humanos.
-Ddd.env
(opcional)
: tu entorno, como prod
o dev
.
-Ddd.version
(opcional)
: tu versión.
-Ddd.tags
(opcional)
Otras etiquetas que desees añadir, en el formato <KEY_1>:<VALUE_1>,<KEY_2:VALUE_2>
.
Ejemplo: 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
Ejemplo: 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>\""
}
}
Validación
En Datadog, consulta la página Data Jobs Monitoring para ver una lista de todos tus trabajos de procesamiento de datos.
Configuración avanzada
Etiquetar tramos (spans) en tiempo de ejecución
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)
Referencias adicionales
Más enlaces, artículos y documentación útiles: