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
Duración de la imagen personalizada: Para garantizar que los clústeres reciban las últimas actualizaciones de servicio y correcciones de errores, la creación de clústeres con una imagen personalizada se limita a 365 días desde 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 por un período superior a 365 días. Para obtener más información, consulta Cómo crear un clúster con una imagen personalizada vencida.
Solo para Linux: Las instrucciones de este documento se aplican solo a sistemas operativos de Linux. Es posible que otros sistemas operativos sean compatibles con versiones futuras de Managed Service para Apache Spark.
Imágenes base compatibles: Las compilaciones de imágenes personalizadas requieren que se comience desde una imagen base de Managed Service para Apache Spark. Se admiten las siguientes imágenes base: Debian, Rocky Linux y Ubuntu.
- Disponibilidad de imágenes 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 imágenes personalizadas hasta una semana después de su fecha de anuncio.
Cómo usar componentes opcionales:
Imágenes básicas
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 las configuraciones de los paquetes del SO.Imágenes base de
2.3y versiones posteriores: Solo se instalan los componentes opcionales seleccionados en la imagen personalizada (consulta la marcagenerate_custom_image.py--optional-components).
Independientemente de la imagen base que se use para tu imagen personalizada, cuando crees tu clúster, debes enumerar o seleccionar los componentes opcionales.
Ejemplo: Comando de Google Cloud CLI para crear un clúster:
gcloud dataproc clusters create CLUSTER_NAME --image=CUSTOM_IMAGE_URI \ --optional-components=COMPONENT_NAME \ ... other flags
Si el nombre del componente no se especifica cuando creas el clúster, se borrará el componente opcional, incluidos los paquetes y las configuraciones del SO personalizados.
Usa imágenes personalizadas alojadas: Si usas una imagen personalizada alojada en otro proyecto, la cuenta de servicio del agente de servicios de Managed Service para Apache Spark en tu proyecto debe tener el permiso
compute.images.geten la imagen del proyecto host. Para ello, otorga 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 del 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 usuario con acceso a Secret Manager (roles/secretmanager.secretAccessor) en los secretos públicos y privados.Para obtener más información con ejemplos, consulta
README.mdy otros archivos en el directorio examples/secure-boot del repositorioGoogleCloudDataproc/custom-imagesen GitHub.Para inhabilitar el arranque seguro: De forma predeterminada, las secuencias de comandos de imágenes personalizadas 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 quieres usar el arranque 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
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init - Instala Python 3.11 o versiones posteriores
- Prepara una secuencia de comandos de personalización que instale paquetes personalizados o actualice la 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 del bucket.
- 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
- Elige una ubicación en la que se almacenen de forma permanente los datos de tu bucket en el menú desplegable Tipo de ubicación.
- 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 configurar los parámetros del trabajo de replicación.
Aparecerá el panel Configurar la replicación entre buckets.
- Para filtrar los objetos que se replicarán por prefijo de nombre de objeto, ingresa un prefijo con el 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 Optimizar 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 tu 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
Usarás 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 especificada de Managed Service para Apache Spark y, luego, ejecuta la secuencia de comandos de personalización dentro de la instancia de VM para instalar paquetes personalizados o actualizar la configuración. Una vez que finaliza la secuencia de comandos de personalización, se cierra la instancia de VM y se crea una imagen personalizada de Managed Service para Apache Spark a partir del 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 creas 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 producirse 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: 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: Es una marca opcional que inhabilita las pruebas de humo en la imagen personalizada recién compilada. 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 compilada pueda crear 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 la imagen personalizada, 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 versiones de imágenes base2.3y posteriores. Es una lista de componentes opcionales, como SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG y PIG (PIG está disponible como componente opcional en las versiones de imagen2.3y posteriores), para instalar en la imagen.Ejemplo: Comando de Google Cloud CLI para crear un clúster:
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 Optional Arguments en GitHub.
Si generate_custom_image.py se ejecuta correctamente, el imageURI de la imagen personalizada se mostrará en el resultado de la ventana de la 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 se usa la herramienta de imagen personalizada estándar de Managed Service para Apache Spark, esta establece una etiqueta goog-dataproc-version en la imagen personalizada creada. La etiqueta refleja las capacidades y los protocolos de la función 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 manualmente 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
La imagen personalizada se especifica 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 por 365 días desde la fecha de su creación (consulta Cómo crear un clúster con una imagen personalizada vencida para usar una imagen personalizada después de la fecha de vencimiento de 365 días).
URI de la imagen personalizada
Pasa el imageUri de la imagen personalizada a la operación de creación de 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
Cómo encontrar 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 ...
Console
- 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 imágenes. Haz clic en Equivalent REST.
- 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
crea un clúster con la gcloud CLI, la API de Managed Service para Apache Spark o la consola deGoogle Cloud .
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 de trabajador) 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"
}
}
}
Console
- Abre la página Crear un clúster de Managed Service para Apache Spark. Se selecciona el panel Configurar clúster.
- En la sección Control de versiones, haz clic en Cambiar. Selecciona la pestaña Imagen personalizada, elige la imagen personalizada que usarás para tu clúster de Managed Service para Apache Spark y, luego, haz clic en Seleccionar. Las VMs del clúster se aprovisionarán con la imagen personalizada seleccionada.
Anula las propiedades del clúster de Managed Service para Apache Spark con una imagen personalizada
Puedes usar imágenes personalizadas para anular las propiedades del clúster que se establecen durante la creación del clúster. Si creas un clúster con una imagen personalizada y la operación de creación del clúster establece propiedades con valores 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
- Fragmento de código de creación de archivos de secuencia de comandos de personalización de muestra 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á dentro 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 del clúster
dataproc:dataproc.custom.image.expiration.tokeny 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.