Puedes crear un clúster de Managed Service para Apache Spark con una imagen personalizada que incluya tus paquetes preinstalados. En esta página, se muestra cómo crear una imagen personalizada y, luego, instalarla en un clúster de Managed Service para Apache Spark.
Limitaciones y consideraciones de uso
Vida útil de la imagen personalizada: Para asegurarte de que los clústeres reciban las actualizaciones de servicio y las correcciones de errores más recientes, la creación de clústeres con una imagen personalizada se limita a 365 días a partir de la fecha de creación de la imagen personalizada. Ten en cuenta que los clústeres existentes creados con una imagen personalizada pueden ejecutarse de forma indefinida.
Es posible que debas usar la automatización si deseas crear clústeres con una imagen personalizada específica durante un período superior a 365 días. Para obtener más información, consulta Crea un clúster con una imagen personalizada vencida.
Solo para Linux: Las instrucciones de este documento solo se aplican a los sistemas operativos Linux. Es posible que se admitan otros sistemas operativos en futuras versiones de Managed Service para Apache Spark.
Imágenes base compatibles: Las compilaciones de imágenes personalizadas requieren comenzar con una imagen base de Managed Service para Apache Spark. Se admiten las siguientes imágenes base: Debian, Rocky Linux y Ubuntu.
- Disponibilidad de la imagen base: Las imágenes nuevas anunciadas en las notas de la versión de Managed Service para Apache Spark no están disponibles para usarse como base de las imágenes personalizadas hasta una semana después de la fecha de anuncio.
Imágenes base
2.2y anteriores: De forma predeterminada, todos los componentes opcionales de Managed Service para Apache Spark (paquetes y parámetros de configuración del SO) se instalan en la imagen personalizada. Puedes personalizar las versiones y los parámetros de configuración de los paquetes del SO.Imágenes base
2.3y posteriores: Solo se instalan los componentes opcionales seleccionados en la imagen personalizada (consulta la marca --optional-components degenerate_custom_image.py).Independientemente de la imagen base que se use para tu imagen personalizada, cuando crees el clúster, debes enumerar o seleccionar componentes opcionales.
Ejemplo: Comando de creación de clústeres de Google Cloud CLI:
gcloud dataproc clusters create CLUSTER_NAME --image=CUSTOM_IMAGE_URI \ --optional-components=COMPONENT_NAME \ ... other flags
Si no se especifica el nombre del componente cuando creas el clúster, se borrará el componente opcional, incluidos los paquetes y las configuraciones personalizados del SO.
Usa imágenes personalizadas alojadas: Si usas una imagen personalizada alojada en otro proyecto, la cuenta de servicio del agente de servicio de Managed Service para Apache Spark en tu proyecto debe tener el permiso
compute.images.geten la imagen del proyecto host. Puedes otorgar este permiso asignando el rolroles/compute.imageUseren la imagen alojada a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark de tu proyecto (consulta Comparte imágenes personalizadas dentro de una organización).Usa secretos de MOK (clave de propietario de la máquina) de arranque seguro: Para habilitar el arranque seguro con tu imagen personalizada de Managed Service para Apache Spark, haz lo siguiente:
Habilita la API de Secret Manager (
secretmanager.googleapis.com. Managed Service para Apache Spark genera y administra un par de claves con el servicio de Secret Manager.Agrega la marca
--service-account="SERVICE_ACCOUNT"al comandogenerate_custom_image.pycuando generes una imagen personalizada. Nota: Debes otorgar a la cuenta de servicio el rol de visualizador de Secret Manager (roles/secretmanager.viewer) en el proyecto y el rol de descriptor de acceso de Secret Manager (roles/secretmanager.secretAccessor) en los secretos públicos y privados.Para obtener más información con ejemplos, consulta el archivo
README.mdy otros archivos en el directorio examples/secure-boot del repositorioGoogleCloudDataproc/custom-imagesen GitHub.Para inhabilitar el inicio seguro, de forma predeterminada, las secuencias de comandos de imagen personalizada de Managed Service para Apache Spark generan y administran un par de claves con Secret Manager cuando se ejecutan desde un clúster de Managed Service para Apache Spark. Si no deseas usar el inicio seguro con tu imagen personalizada, incluye
--trusted-cert=""(valor de marca vacío) en el comandogenerate_custom_image.pycuando generes tu imagen personalizada.
Antes de comenzar
Asegúrate de configurar tu proyecto antes de generar tu imagen personalizada.
Configura tu proyecto
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Instala Python 3.11 o una versión posterior
- Prepara una secuencia de comandos de personalización que instale paquetes personalizados o
actualice parámetros de configuración, por ejemplo:
#! /usr/bin/bash apt-get -y update apt-get install python-dev apt-get install python-pip pip install numpy
Crea un bucket de Cloud Storage en tu proyecto
- En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.
- Haz clic en Crear.
- En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, haz clic en Continuar.
-
En la sección Primeros pasos, haz lo siguiente:
- Ingresa un nombre único a nivel global que cumpla con los requisitos de nombre de los buckets.
- Para agregar una
etiqueta de bucket,
expande la sección Etiquetas (),
haz clic en add_box
Agregar etiqueta y especifica una
keyy unvaluepara tu etiqueta.
-
En la sección Elige dónde almacenar tus datos, haz lo siguiente:
- Selecciona un tipo de ubicación
- En el menú desplegable Tipo de ubicación, elige una ubicación en la que se almacenarán de forma permanente los datos de tu bucket.
- Si seleccionas el tipo de ubicación birregional, también puedes habilitar la replicación turbo con la casilla de verificación correspondiente.
- Para configurar la replicación bucket buckets, selecciona
Agregar replicación entre bucket a través del Servicio de transferencia de almacenamiento y
sigue estos pasos:
Configura la replicación entre buckets
- En el menú Bucket, selecciona un bucket.
En la sección Configuración de replicación, haz clic en Configurar para establecer los parámetros del trabajo de replicación.
Aparecerá el panel Configura la replicación entre buckets.
- Para filtrar los objetos que se replicarán por prefijo de nombre de objeto, ingresa un prefijo del que quieras incluir o excluir objetos y, luego, haz clic en Agregar un prefijo.
- Para establecer una clase de almacenamiento para los objetos replicados, selecciona una clase de almacenamiento en el menú Clase de almacenamiento. Si omites este paso, los objetos replicados usarán la clase de almacenamiento del bucket de destino de forma predeterminada.
- Haz clic en Listo.
-
En la sección Elige cómo almacenar tus datos, haz lo siguiente:
- Selecciona una clase de almacenamiento predeterminada para el bucket o Autoclass para la administración automática de clases de almacenamiento de los datos de tu bucket.
- Para habilitar el espacio de nombres jerárquico, en la sección Optimiza el almacenamiento para cargas de trabajo con uso intensivo de datos, selecciona Habilitar el espacio de nombres jerárquico en este bucket.
- En la sección Elige cómo controlar el acceso a los objetos, selecciona si tu bucket aplica o no la prevención del acceso público y elige un método de control de acceso para los objetos del bucket.
-
En la sección Elige cómo proteger los datos de objetos, haz lo
siguiente:
- Selecciona cualquiera de las opciones de Protección de datos que
desees configurar para tu bucket.
- Para habilitar la eliminación no definitiva, haz clic en la casilla de verificación Política de eliminación no definitiva (para la recuperación de datos) y especifica la cantidad de días que deseas conservar los objetos después de la eliminación.
- Para configurar el Control de versiones de objetos, haz clic en la casilla de verificación Control de versiones de objetos (para el control de versión) y especifica la cantidad máxima de versiones por objeto y la cantidad de días después de los cuales vencen las versiones no actuales.
- Para habilitar la política de retención en objetos y buckets, haz clic en la casilla de verificación Retención (para cumplimiento) y, luego, haz lo siguiente:
- Para habilitar el bloqueo de retención de objetos, haz clic en la casilla de verificación Habilitar la retención de objetos.
- Para habilitar el bloqueo del bucket, haz clic en la casilla de verificación Establecer política de retención del bucket y elige una unidad de tiempo y una duración para el período de retención.
- Para elegir cómo se encriptarán los datos de tus objetos, expande la sección Encriptación de datos () y selecciona un método de encriptación de datos.
- Selecciona cualquiera de las opciones de Protección de datos que
desees configurar para tu bucket.
-
En la sección Primeros pasos, haz lo siguiente:
- Haz clic en Crear.
Genera una imagen personalizada
Usa generate_custom_image.py, un programa de Python, para crear una imagen personalizada de Managed Service para Apache Spark.
Cómo funciona
El programa generate_custom_image.py inicia una instancia de VM de Compute Engine temporal con la imagen base de Managed Service para Apache Spark especificada y, luego, ejecuta la secuencia de comandos de personalización dentro de la instancia de VM para instalar paquetes personalizados o actualizar parámetros de configuración. Después de que finaliza el script de personalización, se cierra la instancia de VM y se crea una imagen personalizada de Managed Service para Apache Spark
desde el disco de la instancia de VM. La VM temporal se borra después de que
se crea la imagen personalizada. La imagen personalizada se guarda y se puede usar para
crear clústeres de Managed Service para Apache Spark.
El programa generate_custom_image.py usa gcloud CLI
para ejecutar flujos de trabajo de varios pasos en Compute Engine.
Ejecuta el código
Bifurca o clona los archivos en GitHub en Imágenes personalizadas de Managed Service para Apache Spark.
Luego, ejecuta la secuencia de comandos generate_custom_image.py para que Managed Service para Apache Spark
genere y guarde tu imagen personalizada.
python3 generate_custom_image.py \ --image-name=CUSTOM_IMAGE_NAME \ [--family=CUSTOM_IMAGE_FAMILY_NAME] \ --dataproc-version=IMAGE_VERSION \ --customization-script=LOCAL_PATH \ --zone=ZONE \ --gcs-bucket=gs://BUCKET_NAME \ [--no-smoke-test]
Marcas necesarias
--image-name: Es el nombre de salida de tu imagen personalizada.--dataproc-version: Es la versión de la imagen de Managed Service para Apache Spark que se usará en tu imagen personalizada. Especifica la versión en formatox.y.z-osox.y.z-rc-os, por ejemplo, "2.0.69-debian10".--customization-script: Es una ruta de acceso local a tu secuencia de comandos que la herramienta ejecutará para instalar tus paquetes personalizados o realizar otras personalizaciones. Esta secuencia de comandos se ejecuta como una secuencia de comandos de inicio de Linux solo en la VM temporal que se usa para crear la imagen personalizada. Puedes especificar una secuencia de comandos de inicialización diferente para otras acciones de inicialización que quieras realizar cuando crees un clúster con tu imagen personalizada.Imágenes entre proyectos: Si tu imagen personalizada se usa para crear clústeres en diferentes proyectos, puede ocurrir un error debido a la caché de comandos
gcloudogsutilalmacenada en la imagen. Para evitar este problema, incluye el siguiente comando en tu secuencia de comandos de personalización para borrar las credenciales almacenadas en caché.rm -r /root/.gsutil /root/.config/gcloud
--zone: Es la zona de Compute Engine en la quegenerate_custom_image.pycreará una VM temporal para usarla en la creación de tu imagen personalizada.--gcs-bucket: Es un URI, en el formatogs://BUCKET_NAME, que apunta a tu bucket de Cloud Storage.generate_custom_image.pyescribe archivos de registro en este bucket.
--family: Es la familia de imágenes de la imagen personalizada. Las familias de imágenes se usan para agrupar imágenes similares y se pueden usar cuando se crea un clúster como un puntero a la imagen más reciente de la familia. Por ejemplo,custom-2-2-debian12--no-smoke-test: Esta es una marca opcional que inhabilita la prueba de humo de la imagen personalizada recién creada. La prueba de humo crea un clúster de prueba de Managed Service para Apache Spark con la imagen recién compilada, ejecuta un trabajo pequeño y, luego, borra el clúster al final de la prueba. La prueba de humo se ejecuta de forma predeterminada para verificar que la imagen personalizada recién creada pueda generar un clúster de Managed Service para Apache Spark funcional. Inhabilitar este paso con la marca--no-smoke-testacelera el proceso de compilación de imágenes personalizadas, pero no se recomienda su uso.--subnet: Es la subred que se usará para crear la VM que compila la imagen personalizada de Managed Service para Apache Spark. Si tu proyecto forma parte de una VPC compartida, debes especificar la URL completa de la subred con el siguiente formato:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.--optional-components: Esta marca solo está disponible cuando se usan las versiones de imagen base2.3y posteriores. Una lista de componentes opcionales, como SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG y PIG (PIG está disponible como un componente opcional en las versiones de imagen2.3y posteriores), para instalar en la imagen.Ejemplo: Comando de creación de clústeres de Google Cloud CLI:
gcloud dataproc clusters create CLUSTER_NAME --image=CUSTOM_IMAGE_URI \ --optional-components=COMPONENT_NAME \ ... other flags
Para obtener una lista de las marcas opcionales disponibles, consulta Argumentos opcionales en GitHub.
Si generate_custom_image.py se ejecuta de forma correcta, el imageURI de la imagen personalizada se
muestra en el resultado de la ventana de terminal (el imageUri completo se muestra en negrita a continuación):
...
managedCluster:
clusterName: verify-image-20180614213641-8308a4cd
config:
gceClusterConfig:
zoneUri: ZONE
masterConfig:
imageUri: **https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME**
...
INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
INFO:__main__:
#####################################################################
WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
WILL EXPIRE ON 2018-07-14 21:35:44.133000.
#####################################################################
Etiquetas de versión de imagen personalizadas (uso avanzado)
Cuando usas la herramienta de imagen personalizada estándar de Managed Service para Apache Spark, la herramienta
establece una etiqueta goog-dataproc-version en la imagen personalizada
creada. La etiqueta refleja las capacidades y los protocolos de las funciones que usa
Managed Service para Apache Spark para administrar el software en la imagen.
Uso avanzado: Si usas tu propio proceso para crear una imagen personalizada de Managed Service para Apache Spark, debes agregar la etiqueta goog-dataproc-version de forma manual a tu imagen
personalizada, de la siguiente manera:
Extrae la etiqueta
goog-dataproc-versionde la imagen base de Managed Service para Apache Spark que se usó para crear la imagen personalizada.gcloud compute images describe ${BASE_DATAPROC_IMAGE} \ --project cloud-dataproc \ --format="value(labels.goog-dataproc-version)"Establece la etiqueta en la imagen personalizada.
gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
Usar una imagen personalizada
Especifica la imagen personalizada cuando creas un clúster de Managed Service para Apache Spark. Una imagen personalizada se guarda en Imágenes de Cloud Compute y es válida para crear un clúster de Managed Service para Apache Spark durante 365 días a partir de su fecha de creación (consulta Crea un clúster con una imagen personalizada vencida para usar una imagen personalizada después de su fecha de vencimiento de 365 días).
URI de la imagen personalizada
Pasas el imageUri de la imagen personalizada a la operación de creación del clúster.
Este URI se puede especificar de alguna de las tres formas a continuación:
- URI completo:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME` - URI parcial:
projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME - Nombre corto: CUSTOM_IMAGE_NAME
Las imágenes personalizadas también se pueden especificar por su URI de familia, que siempre elige la imagen más reciente dentro de la familia de imágenes.
- URI completo:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var> - URI parcial:
projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME
Busca el URI de la imagen personalizada
Google Cloud CLI
Ejecuta el siguiente comando para enumerar los nombres de tus imágenes personalizadas.
gcloud compute images list
Pasa el nombre de tu imagen personalizada al siguiente comando para enumerar
el URI (selfLink) de tu imagen personalizada.
gcloud compute images describe custom-image-name
Fragmento de salida:
... name: CUSTOM_IMAGE_NAME selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ...
Consola deGoogle Cloud
- Abre la página
Compute Engine→Imágenes
en la consola de Google Cloud y, luego, haz clic en el nombre de la imagen.
Puedes insertar una consulta en el campo
filter imagespara limitar la cantidad de imágenes que se muestran.
- Se abrirá la página Detalles de las imágenes. Haz clic en
REST equivalente.
- La respuesta de REST enumera información adicional sobre la imagen, incluido el
selfLink, que es el URI de la imagen.{ ... "name": "my-custom-image", "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME", "sourceDisk": ..., ... }
Crea un clúster con una imagen personalizada
crear un clúster con la gcloud CLI, la API de Dataproc o la consola deGoogle Cloud .
Consola deGoogle Cloud
- Abre la página Crear clúster.
- En la sección Define tu clúster, haz clic en Tipo y versión de imagen, selecciona Imagen personalizada, confirma o cambia el proyecto y selecciona una imagen personalizada disponible.
gcloud CLI
Crea un clúster de Managed Service para Apache Spark con una imagen personalizada usando el
comando
dataproc clusters create
con la marca --image.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM_IMAGE_URI \ --region=REGION \ ... other flags
API de REST
Crea un clúster con una imagen personalizada especificando el URI de la imagen personalizada
en el campo
InstanceGroupConfig.imageUri
en el objeto masterConfig, workerConfig y, si corresponde,
secondaryWorkerConfig incluido en una
solicitud a la API
cluster.create.
Ejemplo: Solicitud REST para crear un clúster estándar de Managed Service para Apache Spark (un nodo principal y dos nodos trabajadores) con una imagen personalizada.
POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
{
"clusterName": "CLUSTER_NAME",
"config": {
"masterConfig": {
"imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
},
"workerConfig": {
"imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
}
}
}
Anula las propiedades del clúster de Managed Service para Apache Spark con una imagen personalizada
Puedes usar imágenes personalizadas para reemplazar las propiedades del clúster que se establecen durante su creación. Si creas un clúster con una imagen personalizada y la operación de creación del clúster establece propiedades con valores que son diferentes de los que establece tu imagen personalizada, los valores de propiedad establecidos por tu imagen personalizada tendrán prioridad.
Para establecer las propiedades del clúster con tu imagen personalizada, haz lo siguiente:
En la secuencia de comandos de personalización de la imagen personalizada, crea un archivo
dataproc.custom.propertiesen/etc/google-dataprocy, luego, establece los valores de propiedad del clúster en el archivo.- Archivo
dataproc.custom.propertiesde muestra:
dataproc.conscrypt.provider.enable=VALUE dataproc.logging.stackdriver.enable=VALUE
- A continuación, se muestra un fragmento de ejemplo de creación de un archivo de secuencia de comandos de personalización para anular dos propiedades del clúster:
cat <<EOF >/etc/google-managed-spark/dataproc.custom.properties dataproc.conscrypt.provider.enable=true dataproc.logging.stackdriver.enable=false EOF
- Archivo
Crea un clúster con una imagen personalizada vencida
De forma predeterminada, las imágenes personalizadas vencen 365 días después de la fecha de creación de la imagen. Puedes crear un clúster que use una imagen personalizada vencida si completas los pasos a continuación.
Intenta crear un clúster de Managed Service para Apache Spark con una imagen personalizada vencida o una imagen personalizada que vencerá en un plazo de 10 días.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --region=REGION \ ... other flags
La gcloud CLI emitirá un mensaje de error que incluye el nombre de la propiedad
dataproc:dataproc.custom.image.expiration.tokendel clúster y el valor del token.
dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
Copia la cadena TOKEN_VALUE en el portapapeles.
Usa gcloud CLI para volver a crear el clúster de Managed Service para Apache Spark y agrega el TOKEN_VALUE copiado como una propiedad del clúster.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \ --region=REGION \ ... other flags
La creación del clúster con la imagen personalizada debería tener éxito.