Habilitar Data Jobs Monitoring para Spark en Amazon EMR

Data Jobs Monitoring ofrece visibilidad del rendimiento y la fiabilidad de las aplicaciones Apache Spark en Amazon EMR.

Requisitos

Se requiere Amazon EMR versión 6.0.1 o posterior.

Configuración

Sigue estos pasos para habilitar Data Jobs Monitoring para Amazon EMR.

  1. Almacena tu clave de API Datadog en AWS Secrets Manager (recomendado).
  2. Concede permisos al perfil de la instancia EC2 EMR.
  3. Crea y configura tu clúster EMR.
  4. Especifica el etiquetado de servicios por aplicación Spark.

Almacenar tu clave de API Datadog en AWS Secrets Manager (recomendado)

  1. Toma nota de tu clave de API Datadog.
  2. En AWS Secrets Manager, elige Almacenar un nuevo secreto.
    • En Tipo de secreto, selecciona Otro tipo de secreto.
    • En Pares clave/valor, añade tu clave de API Datadog como par clave-valor, donde la clave es dd_api_key.
      AWS Secrets Manager, Almacenar un nuevo secreto. Una sección llamada 'Pares clave/valor'. A la izquierda, un cuadro de texto que contiene 'dd_api_key'. A la derecha, un cuadro de texto que contiene una clave de API ofuscada
    • A continuación, haz clic en Next (Siguiente).
  3. En la página Configurar secreto, introduce un Nombre secreto. Puedes utilizar datadog/dd_api_key. A continuación, haz clic en Next (Siguiente).
  4. En la página Configurar rotación, puedes activar opcionalmente la rotación automática. A continuación, haz clic en Next (Siguiente).
  5. En la página Revisar, revisa tus datos secretos. A continuación, haz clic en Store (Almacenar).
  6. En AWS Secrets Manager, abre el secreto que creaste. Toma nota del ARN secreto.

Concede permisos al perfil de la instancia EC2 EMR

El perfil de la instancia EC2 EMR es un rol IAM que se asigna a cada instancia EC2 de un clúster Amazon EMR cuando se lanza la instancia. Sigue la guía de Amazon para preparar este rol en función de las necesidades de tu aplicación de interactuar con otros servicios AWS. Los siguientes permisos adicionales pueden ser necesarios para Data Jobs Monitoring.

Permisos para obtener el valor secreto utilizando AWS Secrets Manager

Estos permisos son necesarios si utilizas AWS Secrets Manager.
  1. En tu consola de AWS IAM, haz clic en Access management > Roles (Gestión de acceso > Roles) en la barra de navegación izquierda.
  2. Haz clic en el rol IAM que quieres utilizar como perfil de la instancia para tu clúster EMR.
  3. En la página siguiente, en la pestaña Permisos, busca la sección Políticas de permisos y haz clic en Add permissions > Create inline policy (Añadir permisos > Crear política en línea).
  4. En la página Especificar permisos, busca la sección Seleccionar un servicio. En servicio, selecciona Secrets Manager.
    Consola de AWS IAM, página Especificar permisos.
    • A continuación, en Acciones permitidas, selecciona GetSecretValue. Se trata de una acción de Lectura.
    • En Recursos, selecciona Específicos. A continuación, junto a Secreto, haz clic en Add ARNs (Añadir ARN) y añade el ARN del secreto que creaste en el primer paso de esta página.
    • Haz clic en Next (Siguiente).
  5. En la página siguiente, dale un nombre a tu política. A continuación, haz clic en Create policy (Crear política).

Permisos para describir clústeres

Estos permisos son necesarios si NO utilizas el rol por defecto, EMR_EC2_DefaultRole.
  1. En tu consola de AWS IAM, haz clic en Access management > Roles (Gestión de acceso > Roles) en la barra de navegación izquierda.
  2. Haz clic en el rol IAM que quieres utilizar como perfil de la instancia para tu clúster EMR.
  3. En la página siguiente, en la pestaña Permisos, busca la sección Políticas de permisos y haz clic en Add permissions > Create inline policy (Añadir permisos > Crear política en línea).
  4. En la página Especificar permisos, activa la pestaña JSON.
    • A continuación, copia y pega la siguiente política en el Editor de políticas.
    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Action": [
                "elasticmapreduce:ListBootstrapActions",
                "elasticmapreduce:ListInstanceFleets",
                "elasticmapreduce:DescribeCluster",
                "elasticmapreduce:ListInstanceGroups"
             ],
             "Resource": [
                "*"
             ]
          }
       ]
    }
    
    • Haz clic en Next (Siguiente).
  5. En la página siguiente, dale un nombre a tu política. A continuación, haz clic en Create policy (Crear política).

Toma nota del nombre del rol IAM que planeas utilizar como perfil de la instancia para tu clúster EMR.

Crear y configurar tu clúster EMR

Cuando crees un nuevo clúster EMR en la consola de Amazon EMR, añade una acción de arranque en la página Crear clúster:

  1. Guarda el siguiente script en un bucket S3 que tu clúster EMR pueda leer. Toma nota de la ruta a este script.

    #!/bin/bash
    
    # Set required parameter DD_SITE
    export DD_SITE=
    
    # Set required parameter DD_API_KEY with Datadog API key.
    # The commands below assumes the API key is stored in AWS Secrets Manager, with the secret name as datadog/dd_api_key and the key as dd_api_key.
    # IMPORTANT: Modify if you choose to manage and retrieve your secret differently.
    SECRET_NAME=datadog/dd_api_key
    export DD_API_KEY=$(aws secretsmanager get-secret-value --secret-id $SECRET_NAME | jq -r .SecretString | jq -r '.["dd_api_key"]')
    
    # Optional: uncomment to send spark driver and worker logs to Datadog
    # export DD_EMR_LOGS_ENABLED=true
    
    # Download and run the latest init script
    curl -L https://install.datadoghq.com/scripts/install-emr.sh > djm-install-script; bash djm-install-script || true
    

    El script anterior define los parámetros necesarios y descarga y ejecuta el script init más reciente para Data Jobs Monitoring en EMR. Si quieres vincular tu script a una versión específica, puedes sustituir el nombre del archivo en la URL por install-emr-0.10.0.sh para utilizar la versión 0.10.0, por ejemplo. El código fuente utilizado para generar este script y los cambios entre versiones de script se pueden encontrar en el repositorio del Datadog.

  2. En la página Crear clúster, busca la sección Acciones de arranque. Haz clic en Add (Añadir) para abrir el cuadro de diálogo Añadir acción de bootstrap.

    Consola de Amazon EMR, cuadro de diálogo 'Crear clúster - Añadir acción de arranque'. Campos de texto para nombre, localización del script y argumentos.

    • En Nombre, colócale un nombre a tu acción de arranque. Puedes utilizar datadog_agent.
    • En Localización del script, introduce la ruta donde almacenaste el script init en S3.
    • Haz clic en Add bootstrap action (Añadir acción de arranque).
  3. En la página Crear clúster, busca la sección Roles de Identity and Access Management (IAM). En el menú desplegable perfil de instancia, selecciona el rol IAM al que hayas concedido permisos en Conceder permisos al perfil de la instancia EC2 EMR.

Cuando se crea tu clúster, esta acción de arranque instala el Datadog Agent y descarga el rastreador Java en cada nodo del clúster.

Especificar el etiquetado de servicios por cada aplicación Spark

El etiquetado te permite filtrar, agregar y comparar mejor tu telemetría en Datadog. Puedes configurar etiquetas (tags) pasando las opciones -Ddd.service, -Ddd.env, -Ddd.version y -Ddd.tags a las propiedades extraJavaOptions de tu controlador y ejecutor Spark.

En Datadog, el nombre de cada trabajo corresponde al valor que definiste para -Ddd.servicio.

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

Validación

En Datadog, consulta la página Data Jobs Monitoring para ver una lista de todos tus trabajos de procesamiento de datos.

Solucionar problemas

If you don’t see any data in DJM after installing the product, follow those steps.

The init script installs the Datadog Agent. To make sure it is properly installed, ssh into the cluster and run the Agent status command:

sudo datadog-agent status

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: