Trabajadores secundarios: VM interrumpibles y no interrumpibles

Además de usar VM estándar de Compute Engine como trabajadores de Dataproc (llamados “primarios”), los clústeres de Dataproc pueden usar trabajadores “secundario”.

Las siguientes características se aplican a todos los trabajadores secundarios en un clúster de Dataproc:

  • Solo procesamiento: Los trabajadores secundarios no almacenan datos. Solo funcionan como nodos de procesamiento. Por lo tanto, puedes usar trabajadores secundarios para escalar el procesamiento sin escalar el almacenamiento.

  • No hay clústeres secundarios solo de trabajador: Tu clúster debe tener trabajadores primarios. Si creas un clúster y no especificas la cantidad de trabajadores primarios, Dataproc agrega dos trabajadores primarios al clúster.

  • Tipo de máquina: los trabajadores secundarios utilizan el tipo de máquina de los trabajadores prmarios del clúster. Por ejemplo, si creas un clúster con trabajadores primarios que usan tipos de máquina n1-standard-4, todos los trabajadores secundarios agregados al clúster también usarán máquinas n1-standard-4.

  • Tamaño de disco persistente: De forma predeterminada, los trabajadores secundarios se crean con el tamaño del disco de arranque del trabajador principal o con un tamaño de menos de 100 GB. Este espacio de disco se usa para el almacenamiento en caché local de datos y no está disponible a través de HDFS. Puedes anular el tamaño de disco predeterminado con el comando gcloud dataproc clusters create --secondary-worker-boot-disk-size durante la creación del clúster. Puedes especificar esta marca incluso si el clúster no tiene trabajadores secundarios cuando se crea.

  • Creación asíncrona: cuando agregas trabajadores secundarios mediante la creación o el escalamiento vertical de un clúster, es posible que los trabajadores secundarios no se aprovisionen en el momento en que finaliza la operación de creación o actualización. Esto se debe a que Dataproc administra los trabajadores secundarios mediante grupos de instancias administrados (MIG), que crean VM de forma asíncrona en cuanto se pueden aprovisionar (consulta Verifica el estado de las instancias administradas).

Trabajadoressecundarios interrumpibles y no interrumpibles

Existen dos tipos de trabajadores secundarios: interrumpibles y no interrumpibles. Todos los trabajadores secundarios en tu clúster deben ser del mismo tipo, ya sea interrumpibles o no interrumpibles. El valor predeterminado es interrumpible.

  • Trabajadores secundarios interrumpibles: Los trabajadores interrumpibles son el tipo de trabajador secundario predeterminado. Se recuperan y se quitan del clúster si Google Cloud los requiere para otras tareas. Aunque la posible eliminación de los trabajadores interrumpibles puede afectar la estabilidad del trabajo, puedes decidir usar instancias interrumpibles para reducir los costos de procesamiento por hora para el procesamiento de datos no críticos o crear clústeres muy grandes a un menor costo total (puedes usar la calculadora de precios de Google Cloud para estimar los costos).

    • Para obtener mejores resultados, la cantidad de trabajadores interrumpibles en tu clúster debe ser inferior al 50% de la cantidad total de todos los trabajadores (primario y todos los trabajadores secundarios) en tu clúster.

    • Cuando se usan trabajadores interrumpibles, es muy probable que tus trabajos experimenten una mayor cantidad de fallas de tareas transitorias de un solo trabajador en comparación con los trabajos que se ejecutan en trabajadores no interrumpibles. Para aumentar la tolerancia del trabajo a errores de tareas de nivel bajo, puedes configurar valores de propiedad similares a los valores de propiedad predeterminados con clústeres con ajuste de escala automático a fin de aumentar la cantidad máxima de reintentos de tareas y evitar fallas en los trabajos.

  • Trabajadores secundarios no interrumpibles: Puedes crear un clúster con trabajadores secundarios no interrumpibles para escalar el procesamiento sin sacrificar la estabilidad del trabajo. Debes especificar “no interrumpible” como el tipo de trabajador secundario (“interrumpible” es el predeterminado).

Usa trabajadores secundarios

Especifica la cantidad y el tipo de trabajadores secundarios (interrumpibles o no interrumpibles) cuando creas un clúster a través de una solicitud a la API de Dataproc mediante la CLI de gcloud gcloud o desde Google Cloud Console.

  • Un clúster puede contener trabajadores secundarios interrumpibles o no interrumpibles, pero no ambos.
  • Puedes actualizar tu clúster después de crearlo para cambiar el número de trabajadores secundarios en tu clúster, pero no el tipo.
  • Las actualizaciones de etiquetas se propagan a todos los trabajadores secundarios interrumpibles en un plazo de 24 horas. Por el momento, las actualizaciones de etiquetas no se propagan a los trabajadores secundarios no interrumpibles existentes. Las actualizaciones de etiquetas se propagan a todos los trabajadores que se agregan a un clúster después de actualizar las etiquetas. Por ejemplo, si escalas verticalmente el clúster, todos los trabajadores principales y secundarios nuevos tendrán las etiquetas nuevas.

Comando de gcloud

Usa el comando gcloud dataproc clusters create para agregar trabajadores secundarios a un clúster en el momento de su creación. Después de crear un clúster, puedes agregar trabajadores secundarios al clúster o quitarlos con el comando gcloud dataproc clusters update (la cantidad, pero no el tipo de trabajadores secundarios que se puede actualizar).

Crea un clúster con trabajadores secundarios

Para crear un clúster con trabajadores secundarios, usa el comando gcloud dataproc clusters create con el argumento --num-secondary-workers. Ten en cuenta que los trabajadores secundarios son interrumpibles de forma predeterminada, pero puedes agregar trabajadores secundarios no interrumpibles cuando creas un clúster si configuras --secondary-worker-type=non-preemptible (consulta el ejemplo 2).

Ejemplo 1

Con el siguiente comando, puedes crear un clúster llamado "my-test-cluster" con dos trabajadores interrumpibles.

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1

Ejemplo 2

El siguiente comando usa la marca secondary-worker-type para crear un clúster llamado "my-test-cluster" con dos trabajadores secundarios no interrumpibles.

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --secondary-worker-type=non-preemptible \
    --region=us-central1

Actualiza un clúster con trabajadores secundarios

Para actualizar un clúster y agregar o quitar trabajadores secundarios, usa el comando gcloud dataproc clusters update con el argumento --num-secondary-workers.

Ejemplo

El siguiente comando actualiza un clúster llamado "my-test-cluster" para que use dos trabajadores secundarios.

gcloud dataproc clusters update my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1

Quita todas las instancias interrumpibles de un clúster

Para quitar todos los trabajadores secundarios de un clúster, usa el comando gcloud dataproc clusters update con --num-secondary-workers configurado como 0.

Ejemplo

El siguiente comando quita todos los trabajadores interrumpibles de un clúster.

gcloud dataproc clusters update my-test-cluster \
    --num-secondary-workers=0 \
    --region=us-central1

API de REST

Crea un clúster con trabajadores secundarios

Usa la API de clusters.create de Dataproc y agrega trabajadores secundarios a un clúster cuando este se crea. Ten en cuenta que los trabajadores secundarios son interrumpibles de forma predeterminada, pero puedes agregar trabajadores secundarios no interrumpibles a los clústeres, como se muestra en el ejemplo 2.

Ejemplo 1

La siguiente solicitud POST crea un clúster con dos trabajadores interrumpibles.


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

Ejemplo 2

La siguiente solicitud POST crea un clúster con dos trabajadores secundarios no interrumpibles.


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

Actualiza un clúster con trabajadores secundarios

Usa la API de clusters.patch de Dataproc para agregar y quitar trabajadores secundarios.

Ejemplo

La siguiente solicitud PATCH actualiza un clúster para que tenga dos trabajadores secundarios.


PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

Console

Puedes especificar la cantidad de trabajadores secundarios cuando creas un clúster de Dataproc desde Cloud Console. Después de crear un clúster, puedes editar su configuración desde Cloud Console a fin de agregar o quitar trabajadores secundarios.

Crea un clúster con trabajadores secundarios

Puedes configurar la cantidad y el tipo de trabajadores secundarios para que se apliquen a un clúster nuevo desde la sección de nodos trabajadores del panel Configurar nodos de Dataproc en la página Crear un clúster de Cloud Console. Especifica la cantidad y el tipo de trabajadores secundarios en los nodos trabajadores y los campos de interrumpibilidad, respectivamente.

Actualiza un clúster con instancias secundarias

Para actualizar la cantidad de trabajadores secundarios en un clúster, haz clic en el nombre del clúster en la página Clústeres de Cloud Console. En la página Detalles del clúster. Haz clic en la pestaña CONFIGURACIÓN, luego haz clic en EDITAR y actualiza el número en el campo de nodos trabajadores secundarios.

Quita todas las instancias interrumpibles de un clúster

Para quitar todos los trabajadores secundarios de un clúster, actualiza la configuración del clúster como se explicó anteriormente, mediante la especificación de 0 en el campo de nodos trabajadores secundarios.

Soluciona problemas de trabajadores secundarios

Problemas de permisos de la cuenta de servicio: Los trabajadores secundarios se crean a través del grupo de instancias administrado y Compute Engine usa la cuenta de servicio del agente de servicio de API de Google de tu proyecto para realizar operaciones de grupo de instancias administrados. El nombre de esta cuenta de servicio tiene el siguiente formato: project-id@cloudservices.gserviceaccount.com.

Si hay un problema de permisos con esta cuenta de servicio, los registros de Dataproc no informarán la falla para crear trabajadores secundarios, pero los trabajadores con errores se enumerarán en la pestaña INSTANCIAS de VM de la página Detalles del clúster en Google Cloud Console sin una marca de verificación verde (abre Dataproc Clústeres y, luego, haz clic en el nombre del clúster para abrir la página Detalles del clúster del clúster).

  • Problemas de permisos de grupos de instancias administrados: Para verificar si hay un problema con los permisos de grupos de instancias administrados, consulta los registros en el Explorador de registros del tipo de recurso del “Grupo de instancias de Google Compute Engine” y filtra por el ID del grupo de instancias correspondiente. El filtro del ID del grupo de instancias mostrará el nombre del grupo de instancias en el formato dataproc-CLUSTER NAME-sw y el ID del grupo de instancias se propagará automáticamente en la consulta del registro. En lugar de usar los filtros desplegables, también puedes aplicar un filtro de registro para resource.type="gce_instance_group" y resource.labels.instance_group_name="dataproc-CLUSTER NAME-sw".

  • Problemas de permisos de imagen personalizada: Si las VM del clúster de Dataproc se crean con imágenes personalizadas recuperadas de otro proyecto, la función Compute Image User debe asignarse a la cuenta de servicio project-id@cloudservices.gserviceaccount.com de tu proyecto (consulta Otorga acceso a las imágenes a un grupo de instancias administrado ). Si no se asignó la función correcta, aparecerá este mensaje de error en los registros: Required 'compute.images.useReadOnly' permission for 'projects/[IMAGE PROJECT]/global/images/[IMAGE NAME]