Después de crear un clúster de Dataproc, lo puedes configurar (“escalar”) mediante el aumento o la disminución de la cantidad de nodos trabajadores primarios o secundarios (escalamiento horizontal) en el clúster. Puedes escalar un clúster de Dataproc en cualquier momento, incluso cuando los trabajos están en ejecución. No puedes cambiar el tipo de máquina de un clúster existente (escalamiento vertical). Para escalar verticalmente, crea un clúster con un tipo de máquina compatible y, luego, migra los trabajos al clúster nuevo.
¿Por qué escalar un clúster de Dataproc?
- Para aumentar la cantidad de trabajadores a fin de que un trabajo se ejecute más rápido
- Para disminuir la cantidad de trabajadores y ahorrar dinero (consulta Retiro de servicio ordenado como una opción que se usa cuando se reduce el tamaño de un clúster a fin de evitar la pérdida de trabajo en progreso)
- Para aumentar la cantidad de nodos y expandir el almacenamiento disponible en el sistema de archivos distribuido de Hadoop (HDFS)
Como los clústeres se pueden escalar más de una vez, puedes necesitar aumentar o disminuir el tamaño del clúster en algún momento y volverlo a hacer después.
Usa el escalamiento
Hay tres maneras en las que puedes escalar tu clúster de Dataproc:
- Usa la herramienta de línea de comandos de
gcloud
en gcloud CLI. - Edita la configuración del clúster en la consola de Google Cloud.
- Usa la API de REST.
Los trabajadores nuevos que se agreguen a un clúster usarán el mismo tipo de máquina que los trabajadores existentes. Por ejemplo, si un clúster se crea con trabajadores que usan el tipo de máquina n1-standard-8
, los trabajadores nuevos también usarán el tipo de máquina n1-standard-8
.
Puedes escalar la cantidad de trabajadores principales o secundarios (interrumpibles), o ambos. Por ejemplo, si solo escalas la cantidad de trabajadores interrumpibles, la cantidad de trabajadores principales permanece igual.
gcloud
Para escalar un clúster con gcloud dataproc clusters update, ejecuta el siguiente comando.gcloud dataproc clusters update cluster-name \ --region=region \ [--num-workers and/or --num-secondary-workers]=new-number-of-workers
gcloud dataproc clusters update dataproc-1 \ --region=region \ --num-workers=5 ... Waiting on operation [operations/projects/project-id/operations/...]. Waiting for cluster update operation...done. Updated [https://dataproc.googleapis.com/...]. clusterName: my-test-cluster ... masterDiskConfiguration: bootDiskSizeGb: 500 masterName: dataproc-1-m numWorkers: 5 ... workers: - my-test-cluster-w-0 - my-test-cluster-w-1 - my-test-cluster-w-2 - my-test-cluster-w-3 - my-test-cluster-w-4 ...
API de REST
Consulta clusters.patch.
Ejemplo
PATCH /v1/projects/project-id/regions/us-central1/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances { "config": { "workerConfig": { "numInstances": 4 }, "secondaryWorkerConfig": { "numInstances": 2 } }, "labels": null }
Console
Después de crear un clúster, lo puedes escalar si abres la página Detalles del clúster desde la página Clústeres en la consola de Google Cloud y, luego, haces clic en el botón Editar en la pestaña Configuración. Ingresa un valor nuevo para la cantidad de nodos trabajadores o nodos trabajadores interrumpibles (actualizados a “5” y “2”, respectivamente, en la captura de pantalla siguiente). Haz clic en Guardar (Save) para actualizar el clúster.Cómo Dataproc selecciona los nodos del clúster para quitarlos
En los clústeres creados con versiones de imagen 1.5.83+, 2.0.57+, y 2.1.5+, cuando se reduce la escala de un clúster, Dataproc intenta minimizar el impacto de la eliminación de nodos en las aplicaciones de YARN en ejecución. Para ello, primero quita los nodos inactivos, no aptos y en estado inactivo y, luego, quita los nodos con los menos contenedores y aplicaciones principales de YARN en ejecución.
Retiro de servicio ordenado
Cuando realizas un escalamiento descendente de un clúster, el trabajo en progreso puede terminar antes de completarse. Si usas Dataproc v 1.2 o una versión posterior, puedes usar el retiro de servicio ordenado, que incorpora el retiro de servicio ordenado de nodos YARN para terminar el trabajo en curso en un trabajador antes de quitarlo del clúster de Cloud Dataproc.
Retiro de servicio ordenado y trabajadores secundarios
El grupo de trabajadores interrumpibles (secundarios) continúa con el aprovisionamiento o el borrado de trabajadores a fin de alcanzar el tamaño esperado incluso después de que una operación de escalamiento de clúster se marcó como completada. Si intentas el retiro de servicio ordenado de un trabajador secundario y recibes un mensaje de error similar al siguiente:
“El grupo de trabajadores secundarios no se puede modificar fuera de Dataproc. Si la creación o actualización de este clúster es reciente, espera unos minutos antes de realizar un retiro de servicio ordenado a fin de permitir que todas las instancias secundarias se unan o abandonen el clúster.
Tamaño del grupo de trabajadores secundarios esperado: x. Tamaño real: y”,
espera unos minutos y, luego, repite la solicitud de retiro de servicio ordenado.
También ten en cuenta lo siguiente:
- Puedes realizar un retiro de servicio de manera forzosa de trabajadores interrumpibles en cualquier momento.
- Puedes realizar un retiro de servicio ordenado de trabajadores principales en cualquier momento
Usa retiro de servicio ordenado
El retiro de servicio ordenado de Dataproc incorpora el retiro de servicio ordenado de nodos YARN para finalizar un trabajo en curso en un trabajador antes de quitarlo del clúster de Cloud Dataproc. Por configuración predeterminada, el retiro de servicio ordenado está inhabilitado. Lo inhabilitas mediante la configuración de un valor de tiempo de espera cuando actualizas tu clúster con el fin de quitar uno o más trabajadores del clúster.
gcloud
Cuando actualices un clúster para quitar uno o más trabajadores, usa el comando gcloud dataproc clusters update con la marca--graceful-decommission-timeout
. Los valores del tiempo de espera (string) pueden ser un valor de “0s” (el predeterminado; retiro de servicio a la fuerza no ordenado) o una duración positiva relacionada con la hora actual (por ejemplo, “3s”).
La duración máxima es de 1 día.
gcloud dataproc clusters update cluster-name \ --region=region \ --graceful-decommission-timeout="timeout-value" \ [--num-workers and/or --num-secondary-workers]=decreased-number-of-workers \ ... other args ...
API de REST
Consulta clusters.patch.gracefulDecommissionTimeout. Los valores del tiempo de espera (string) pueden ser un valor de “0” (el predeterminado; retiro de servicio a la fuerza no ordenado) o una duración en segundos (por ejemplo, “3s”). La duración máxima es de 1 día.Console
Después de crear un clúster, puedes seleccionar el retiro de servicio ordenado de un clúster si abres la página Detalles del clúster (Cluster details) desde la página de la consola de Google Cloud Clústeres y, luego, haces clic en el botón Editar (Edit) en la pestaña Configuración (Configuration). En la sección Retiro de servicio ordenado (Graceful Decommissioning), marca la casilla “Usa el retiro de servicio ordenado” (Use graceful decommissioning) y, luego, selecciona un valor de tiempo de espera. Haz clic en Guardar para actualizar el clúster.Cómo cancelar una operación de reducción de escala de retiro de servicio ordenado
En los clústeres de Dataproc creados con versiones de imagen 2.0.57+, o 2.1.5+, puedes ejecutar el comando gcloud dataproc operations cancel
o emitir una solicitud a la API de Dataproc operations.cancel
para cancelar una operación de reducción de escala de baja elegante.
Cuando cancelas una operación de reducción de escala de retiro de servicio ordenado, sucede lo siguiente:
Los trabajadores en un estado
DECOMMISSIONING
se vuelven a encargar y se convierten enACTIVE
cuando se completa la cancelación de la operación.Si la operación de reducción incluye actualizaciones de etiquetas, es posible que las actualizaciones no se apliquen.
Para verificar el estado de la solicitud de cancelación, puedes
ejecutar el comando gcloud dataproc operations describe
o enviar una solicitud operations.get
a la API de Dataproc. Si la operación de cancelación se realiza correctamente, el estado de la operación interna se marca como CANCELADA.