Instancias de trabajador secundarias de Managed Service para Apache Spark

Además de usar VMs estándar de Compute Engine como trabajadores de Managed Service para Apache Spark (llamados “primarios”), los clústeres de Managed Service para Apache Spark pueden usar trabajadores secondary.

Las siguientes características se aplican a todos los trabajadores secundarios en un clúster de Managed Service para Apache Spark:

  • 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.

  • Solo trabajadores secundarios : Puedes crear un clúster de reducción de escala a cero solo con trabajadores secundarios. Sin embargo, si creas un clúster estándar y solo especificas trabajadores secundarios (no especificas la cantidad de trabajadores primarios), Managed Service para Apache Spark agrega dos trabajadores primarios al clúster.

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

    En lugar de usar el tipo de máquina de trabajador primario predeterminado para los trabajadores secundarios, puedes especificar una o más listas clasificadas de tipos de máquina para los trabajadores secundarios. Consulta VMs flexibles de Managed Service para Apache Spark para obtener más información.

  • 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 1,000 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 gcloud dataproc clusters create --secondary-worker-boot-disk-size comando 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 Managed Service para Apache Spark administra los trabajadores secundarios mediante grupos de instancias administrados (MIG), que crean VMs de forma asíncrona en cuanto se pueden aprovisionar (consulta Verifica el estado de las instancias administradas).

Trabajadores secundarios interrumpibles y no interrumpibles

Existen tres tipos de trabajadores secundarios: VMs Spot, VMs interrumpibles estándar, y VMs no interrumpibles. El tipo de trabajador secundario predeterminado de Managed Service para Apache Spark es la VM interrumpible estándar. Puedes especificar una combinación de trabajadores secundarios Spot y no interrumpibles.

Ejemplo: Si seleccionas tres trabajadores secundarios cuando creas un clúster, puedes especificar tres VMs Spot, tres VMs interrumpibles, tres VMs no interrumpibles o una combinación de trabajadores Spot y no interrumpibles.

Trabajadores interrumpibles

  • 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.

  • Al usar trabajadores interrumpibles, es muy probable que tus trabajos experimenten una mayor cantidad de fallas transitorias de tareas 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.

  • Consideración de ahorro de costos: El uso de VMs interrumpibles no siempre ahorra costos, ya que las interrupciones pueden provocar una ejecución más prolongada del trabajo, lo que genera costos más altos. Aunque el uso del modo de flexibilidad mejorada (EFM) con VMs interrumpibles puede ayudar a mitigar este resultado, el ahorro general de costos de las VMs interrumpibles variará con cada caso de uso. En general, los trabajos de corta duración son más adecuados para el uso de VM interrumpible, ya que la probabilidad de interrupciones durante la ejecución del trabajo será menor. Prueba diferentes opciones de trabajo, como VMs no interrumpibles y VMs interrumpibles con EFM, para estimar los costos y llegar a la mejor solución.

Trabajadores no interrumpibles

Selecciona trabajadores secundarios

Puedes especificar la cantidad y el tipo de trabajadores secundarios cuando creas un clúster con la Google Cloud consola, CLI de gcloud o la API de Dataproc.

  • Puedes combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles.
  • 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. 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.

Consola de

Puedes especificar la cantidad de trabajadores secundarios cuando creas un clúster de Managed Service para Apache Spark desde la Google Cloud consola. Después de crear un clúster, puedes editar su configuración desde la Google Cloud consola para agregar o quitar trabajadores secundarios.

Crea un clúster con trabajadores secundarios

  1. Abre la página Crear clúster.
  2. Haz clic en Configuración adicional para expandir esa sección.
  3. Edita Trabajadores secundarios.
  4. En el panel que se abre, especifica la cantidad, el tipo y otros parámetros de configuración de los trabajadores secundarios.

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 de la Google Cloud consola. 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 secundarias 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.

Comando de gcloud CLI

Usa el gcloud dataproc clusters create comando 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 gcloud dataproc clusters update comando (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 gcloud dataproc clusters create comando con el --num-secondary-workers argumento. Los trabajadores secundarios son VMs interrumpibles estándar de forma predeterminada. Puedes especificar trabajadores secundarios no interrumpibles o Spot cuando creas un clúster si configuras la marca --secondary-worker-type como `non-preemptible` o `spot`. En los siguientes ejemplos, se muestra cómo crear un clúster con cada tipo de trabajador secundario: `preemptible` (predeterminado), Spot (interrumpible) y no interrumpible. Puedes usar marcas adicionales para combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles.

Ejemplo 1

Con el siguiente comando, puedes crear un clúster llamado “cluster1” con dos trabajadores secundarios interrumpibles estándar (tipo predeterminado).

gcloud dataproc clusters create cluster1 \
    --num-secondary-workers=2 \
    --region=us-central1
Ejemplo 2

El siguiente comando usa la marca secondary-worker-type para crear un clúster llamado “cluster2” con dos trabajadores secundarios Spot (interrumpibles).

gcloud dataproc clusters create cluster2 \
    --num-secondary-workers=2 \
    --secondary-worker-type=spot \
    --region=us-central1

Ejemplo 3

El siguiente comando usa la marca secondary-worker-type para crear un clúster llamado “cluster3” con dos trabajadores secundarios no interrumpibles.

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

Cambia el tamaño del disco de arranque del trabajador secundario. De forma predeterminada, todos los trabajadores secundarios se crean con el tamaño de disco de arranque del trabajador principal o de menos de 1,000 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 gcloud dataproc clusters create --secondary-worker-boot-disk-size comando durante la creación del clúster. Esta marca se puede especificar incluso si el clúster no tiene trabajadores secundarios en el momento de la creación.

Permite que la Google Cloud consola de elabore tu solicitud de creación de clústeres: En la parte inferior de la página Crear clúster, haz clic en Línea de comandos equivalente o REST equivalente para que la Google Cloud consola cree un comando de gcloud CLI o una solicitud de API de REST equivalentes.

Actualiza un clúster con trabajadores secundarios

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

Ejemplo

El siguiente comando actualiza example-cluster para que use cuatro trabajadores secundarios (del tipo predeterminado o del tipo especificado cuando creaste el clúster).

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=4 \
    --region=us-central1

Quita todos los trabajadores secundarios de un clúster

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

Ejemplo

El siguiente comando quita todos los trabajadores secundarios de “example-cluster”.

gcloud dataproc clusters update example-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 Managed Service para Apache Spark clusters.create y agrega trabajadores secundarios a un clúster cuando este se crea. En los siguientes ejemplos, se muestra cómo crear un clúster con cada tipo de trabajador secundario: preemptible (predeterminado), spot (interrumpible) y non-preemptible. Puedes usar campos adicionales para combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles.

Ejemplo 1

La siguiente solicitud POST crea un clúster llamado "cluster1" con dos trabajadores de VM interrumpibles estándar (tipo predeterminado).


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

{
  "clusterName": "cluster1",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

Ejemplo 2

La siguiente solicitud POST crea un clúster llamado "cluster2" con dos trabajadores de VM Spot (interrumpibles).


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

{
  "clusterName": "cluster2",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "SPOT"
    }
  }
}

Ejemplo 3

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


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

{
  "clusterName": "cluster3",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

Actualiza un clúster con trabajadores secundarios

Usa la API de Managed Service para Apache Spark clusters.patch para agregar y quitar trabajadores secundarios.

Ejemplo

La siguiente solicitud PATCH actualiza un clúster para que tenga cuatro trabajadores secundarios (del tipo predeterminado o del tipo especificado cuando creaste el clúster).


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

Permite que la Google Cloud consola de elabore tu solicitud de creación de clústeres: En la parte inferior de la página Crear clúster, haz clic en Línea de comandos equivalente o REST equivalente para que la Google Cloud consola cree un comando de gcloud CLI o una solicitud de API de REST equivalentes.

Soluciona problemas de trabajadores secundarios

  • Problemas de permisos de la cuenta de servicio: Los trabajadores secundarios se crean a través de un grupo de instancias administrado. Si hay un problema de permisos, los registros de Managed Service para Apache Spark 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 la Google Cloud consola sin una marca de verificación verde. Para ver la lista, abre la página Clústeres de Managed Service para Apache Spark 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 grupo de instancias administrado:

    1. Busca el nombre del grupo de instancias administrado (instanceGroupManagerName).

      Google Cloud Consola de

      1. Abre la página Clústeres y, luego, haz clic en el nombre del clúster para abrir la página Detalles del clúster del clúster.
      2. Haz clic en REST equivalente en la parte inferior de la página y, luego, consulta el valor config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName.

      gcloud CLI

      Ejecuta el gcloud dataproc clusters describe comando con la marca --format para mostrar el instanceGroupManagerName.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION \
          --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
      

      API de REST

      Envía una solicitud clusters.get para mostrar el valor de config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName.

    2. Visualiza los registros en el Explorador de registros.
    • Selecciona el tipo de recurso Google Compute Engine Instance Group y filtra por el nombre del grupo de instancias administrado.

    • Como alternativa, puedes aplicar un filtro de registro para `resource.type="gce_instance_group" y resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME.

Combina trabajadores secundarios Spot con trabajadores secundarios no interrumpibles

Puedes especificar una combinación de trabajadores secundarios Spot y no interrumpibles cuando creas un clúster de Managed Service para Apache Spark.

Configuración de trabajadores secundarios para combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles

Usa la siguiente configuración de trabajadores secundarios cuando crees un clúster de Managed Service para Apache Spark para obtener un nivel mínimo de capacidad de trabajador secundario con la capacidad de aumentar la capacidad cuando las VMs Spot estén disponibles:

  • Cantidad de trabajadores secundarios: Es la cantidad total de trabajadores secundarios que se aprovisionarán.

  • Tipo de trabajador secundario: spot es el tipo de trabajador secundario cuando se combinan trabajadores secundarios Spot con trabajadores secundarios no interrumpibles.

  • standardCapacityBase: Es la cantidad de trabajadores secundarios no interrumpibles (estándar) que se aprovisionarán. Los trabajadores secundarios no interrumpibles se aprovisionan antes que otros tipos de trabajadores secundarios.

  • standardCapacityPercentAboveBase: Después de que se complete la cantidad standardCapacityBase de trabajadores secundarios, la cantidad restante de trabajadores secundarios necesarios para cumplir con la cantidad total de trabajadores secundarios solicitados se completa con una combinación de VMs no interrumpibles y Spot de la siguiente manera:

    • standardCapacityPercentAboveBase: Es el porcentaje de los trabajadores secundarios restantes que se completarán con VMs no interrumpibles.
    • La cantidad restante necesaria para cumplir con la cantidad total de trabajadores secundarios solicitados se completa con VMs Spot.

Ejemplo:

  • Cantidad de trabajadores secundarios: 15
  • standardCapacityBase: 5
  • standardCapacityPercentAboveBase 30%

Resultado:

  • No interrumpible: 8 = 5 (standardCapacityBase) + 3 (30% de los 10 restantes)
  • Spot: 7 (70% de los 10 restantes)
  • Total = 15

Crea un clúster con una combinación de trabajadores secundarios Spot y no interrumpibles

Puedes usar la gcloud CLI o la API de Dataproc para combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles cuando creas un clúster.

gcloud

Ejecuta el siguiente comando de forma local o en Cloud Shell para crear un clúster con una combinación de trabajadores secundarios Spot y no interrumpibles.

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --secondary-worker-type=spot \
    --num-secondary-workers=NUMBER_SECONDARY_WORKERS \
    --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \
    --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \
    OTHER_FLAGS_AS_NEEDED

Notas:

API

Para combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles, configura los campos de la API de Managed Service para Apache Spark preemptibility, standardCapacityBase y standardCapacityPercentAboveBase como parte de una solicitud de cluster.create , como se muestra en el siguiente ejemplo de JSON:

{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 15,
      **"preemptibility": "spot"**,
      "instanceFlexibilityPolicy": {
        "provisioningModelMix": {
          **"standardCapacityBase": STANDARD_CAPACITY_BASE**
          **"standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE**
        }
      }
    }
  }
}

Notas:

Combina la combinación de trabajadores secundarios con VMs flexibles

Puedes combinar trabajadores secundarios Spot con trabajadores secundarios no interrumpibles y especificar formas de VM flexibles para los trabajadores secundarios cuando creas un clúster.

Ejemplo de gcloud CLI:

gcloud dataproc clusters create cluster-name \
    --project=project-id \
    --region=us-central1 \
    --secondary-worker-type=spot \
    --num-secondary-workers=15 \
    --secondary-worker-standard-capacity-base=5 \
    --secondary-worker-standard-capacity-percent-above-base=30 \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"
    ...other flags as needed

Características de la combinación de trabajadores secundarios

En esta sección, se describen algunos de los comportamientos y las características asociados con la combinación de trabajadores secundarios Spot con trabajadores secundarios no interrumpibles.

Preferencia de trabajador secundario

Managed Service para Apache Spark no da preferencia a las VMs Spot ni a las no interrumpibles cuando programa aplicaciones en trabajadores secundarios.

Escalamiento de trabajadores secundarios

Cuando los trabajadores secundarios se escalan mediante el ajuste de escala automático o el escalamiento manual, Managed Service para Apache Spark mantiene la proporción solicitada de Spot a no interrumpible cuando agrega trabajadores secundarios.

Actualiza la configuración de la combinación de trabajadores secundarios

Especifica la combinación de trabajadores secundarios Spot y no interrumpibles cuando creas un clúster de Managed Service para Apache Spark. No puedes cambiar la configuración de la combinación de trabajadores secundarios después de crear el clúster.

Interrupción de trabajadores secundarios Spot

  • Managed Service para Apache Spark no controla el momento de la interrupción de la VM Spot (consulta Interrupción de VMs Spot).
  • Cuando se produce una interrupción Spot, el grupo de trabajadores secundarios puede ejecutarse con capacidad reducida de forma temporal hasta que Compute Engine vuelva a aprovisionar las VMs interrumpidas.
  • Managed Service para Apache Spark no agregará capacidad a un grupo de trabajadores secundarios que exceda la configuración inicial del grupo.