Acciones de inicialización

Cuando creas un clúster de Cloud Dataproc, puedes especificar acciones de inicialización en ejecutables o secuencias de comandos que Cloud Dataproc ejecutará en todos los nodos en tu clúster de Cloud Dataproc inmediatamente después de configurar el clúster. A menudo, las acciones de inicialización configuran dependencias de trabajo, como la instalación de paquetes de Python, para que los trabajos puedan enviarse al clúster sin tener que instalar dependencias cuando se ejecutan los trabajos.

Puedes encontrar secuencias de comandos de acciones de inicialización de uso frecuente y otros ejemplos en las siguientes ubicaciones:

Cuestiones importantes que tienes que saber

Hay algunas cuestiones importantes que tienes que saber cuando creas o usas acciones de inicialización:

  • Las acciones de inicialización se ejecutan como el usuario root. Esto significa que no necesitas usar sudo.
  • Debes usar rutas de acceso absolutas en las acciones de inicialización.
  • Tus acciones de inicialización deben usar una línea shebang para indicar cómo debe interpretarse la secuencia de comandos (como #!/bin/bash o #!/usr/bin/python).
  • Si una acción de inicialización termina con un código de salida que no es cero, la operación de creación del clúster presentará un estado de "ERROR". Para depurar la acción de inicialización, SSH en las instancias de VM del clúster y examina los registros. Luego de solucionar el problema de la acción de inicialización, puedes borrar y luego volver a crear el clúster.
  • Si creas un clúster de Cloud Dataproc solo con direcciones IP internas, los intentos para acceder a Internet en una acción de inicialización fallarán salvo que hayas configurado rutas para dirigir el tráfico a través de NAT o una puerta de enlace de VPN. Sin acceso a Internet, puedes habilitar Acceso privado a Google y colocar las dependencias de trabajos en Cloud Storage; los nodos del clúster pueden descargar las dependencias de Cloud Storage desde IP internas.
  • Puedes usar imágenes personalizadas de Cloud Dataproc en vez de acciones de inicialización para configurar dependencias de trabajos.

Cómo usar acciones de inicialización

Las acciones de inicialización del clúster se pueden especificar independientemente de cómo creas el clúster:

  • A través de Google Cloud Platform Console
  • En la línea de comandos con la herramienta de línea de comandos de gcloud
  • De manera programática con la API clusters.create de Cloud Dataproc (consulta NodeInitializationAction)

Comando de gcloud

Cuando creas un clúster con el comando gcloud dataproc clusters create, especifica las ubicaciones de Cloud Storage (URI) de las secuencias de comandos o ejecutables de la inicialización con la marca --initialization-actions. La sintaxis para usar esta marca se muestra a continuación, que puedes ver desde la línea de comandos si ejecutas gcloud dataproc clusters create --help.

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --initialization-action-timeout timeout-value (default=10m) \
    ... other flags ...

Puedes usar la marca --initialization-action-timeout opcional para especificar el período de espera de la acción de inicialización. El tiempo de espera predeterminado es de 10 minutos. Si la secuencia de comandos o el ejecutable no se completaron al final del tiempo de espera, Cloud Dataproc cancela la acción de inicialización.

API de REST

Especifica uno o más ejecutables o secuencias de comandos NodeInitializationAction en el arreglo ClusterConfig.initializationActions como parte de una solicitud a la API clusters.create.

Ejemplo

POST /v1/projects/my-project-id/regions/global/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "default",
      "zoneUri": "us-central1-b"
    },
    "masterConfig": {
      "numInstances": 1,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "workerConfig": {
      "numInstances": 2,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "initializationActions": [
      {
        "executableFile": "gs://cloud-example-bucket/my-init-action.sh"
      }
    ]
  }
}

Console

Cuando creas un clúster con GCP Console, puedes especificar una o más acciones de inicialización en el campo Initialization actions. Para ver este campo, expande el panel de Crea un clúster (Opciones avanzadas).
Ingresa las ubicaciones de Cloud Storage de cada acción de inicialización en este formulario. Haz clic en Browse (Explorar) para abrir la página del navegador de GCP Console Cloud Storage para seleccionar un archivo de inicialización. Cada archivo de inicialización debe ingresarse por separado (presiona <Intro> para agregar una entrada nueva).

Cómo aplicar argumentos a las acciones de inicialización

Cloud Dataproc establece valores de metadatos especiales para las instancias que se ejecutan en tus clústeres. Puedes configurar tus propios metadatos personalizados como una forma de aplicar argumentos a las acciones de inicialización.

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --metadata name1=value1,name2=value2... \
    ... other flags ...

Los valores de metadatos se pueden leer dentro de las acciones de inicialización de la siguiente manera:

var1=$(/usr/share/google/get_metadata_value attributes/name1)

Selección de nodos

Si quieres limitar las acciones de inicialización para los nodos principales o del trabajador, puedes agregar una lógica de selección de nodos simple a tu ejecutable o secuencia de comandos.

ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  ... master specific actions ...
else
  ... worker specific actions ...
fi

Etapa de pruebas de binarios

Una situación de inicialización del clúster común es la etapa de pruebas de los binarios de trabajo en un clúster para eliminar la necesidad de habilitar a etapa los binarios cada vez que se envía un trabajo. Por ejemplo, supone que la siguiente secuencia de comandos de inicialización se almacena en gs://my-bucket/download-job-jar.sh, una ubicación del depósito de Cloud Storage:

#!/bin/bash
ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  gsutil cp gs://my-bucket/jobs/sessionalize-logs-1.0.jar home/username
fi

La ubicación de esta secuencia de comandos se puede pasar al comando gcloud dataproc clusters create:

gcloud dataproc clusters create my-dataproc-cluster \
    --initialization-actions gs://my-bucket/download-job-jar.sh

Cloud Dataproc ejecutará esta secuencia de comandos en todos los nodos y, como consecuencia de la lógica de selección de nodos de la secuencia de comandos, descargará el jar al nodo principal. Por lo tanto, los trabajos enviados pueden usar el jar previo a la etapa de pruebas:

gcloud dataproc jobs submit hadoop \
    --cluster my-dataproc-cluster \
    --jar file:///home/username/sessionalize-logs-1.0.jar

Muestras de acciones de inicialización

Las secuencias de comandos de acciones de inicialización de uso frecuente y otros ejemplos se ubican en gs://dataproc-initialization-actions, un depósito público de Cloud Storage y en un repositorio de GitHub. Para contribuir con una secuencia de comandos, revisa el documento CONTRIBUTING.md y luego presenta una solicitud de extracción.

Logging

El resultado de la ejecución de cada acción de inicialización se registra para cada instancia en /var/log/dataproc-initialization-script-X.log, donde X es el índice basado en cero de cada secuencia de comandos de acción de inicialización sucesiva. Por ejemplo, si tu clúster tiene dos acciones de inicialización, los resultados se registrarán en /var/log/dataproc-initialization-script-0.log y /var/log/dataproc-initialization-script-1.log.

Pasos siguientes

Explora estas acciones de inicialización:

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Dataproc
Si necesitas ayuda, visita nuestra página de asistencia.