Los clústeres de Dataproc se pueden aprovisionar con una imagen personalizada que incluya paquetes ya instalados de un usuario. En los pasos que se indican a continuación, se explica cómo crear una imagen personalizada y, luego, instalarla en un clúster de Dataproc.
Notas:
- Las instrucciones de este documento se aplican solo a sistemas operativos de Linux. Es posible que otros sistemas operativos sean compatibles con versiones de Dataproc futuras.
- Las compilaciones de imágenes personalizadas requieren comenzar a partir de una imagen base de Dataproc (se admiten imágenes base de Debian, Rocky Linux y Ubuntu).
- Uso de componentes opcionales: De forma predeterminada, las imágenes personalizadas heredan todos los componentes opcionales de Dataproc (paquetes y configuraciones del SO) de sus imágenes base. Puedes personalizar las versiones y configuraciones de paquetes predeterminadas del SO, pero debes especificar el nombre del componente opcional cuando crees tu clúster (por ejemplo, mediante la ejecución del comando
gcloud dataproc clusters create --optional-components=component-name
[Consulta Agrega componentes opcionales]). Si el nombre del componente no se especifica cuando creas el clúster, se borrará el componente (incluidos los paquetes y las configuraciones del SO personalizados).
Antes de comenzar
Configure su 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.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Dataproc API, Compute Engine API, and Cloud Storage.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Dataproc API, Compute Engine API, and Cloud Storage.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
- Instala Python 2.7 y versiones posteriores.
- Prepara una secuencia de comandos de personalización que instale paquetes personalizados o actualice las configuraciones, 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.
- Haga clic en Crear bucket.
- En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, haz clic en Continuar.
- En Nombre de tu bucket, ingresa un nombre que cumpla con los requisitos de nomenclatura de buckets.
-
En Elige dónde almacenar tus datos, haz lo siguiente:
- Selecciona una opción de Tipo de ubicación.
- Selecciona una opción de Ubicación.
- Para Elegir una clase de almacenamiento predeterminada para tus datos, selecciona una clase de almacenamiento.
- En Elige cómo controlar el acceso a los objetos, selecciona una opción de Control de acceso.
- Para la Configuración avanzada (opcional), especifica un método de encriptación, una política de retención o etiquetas de bucket.
- Haga clic en Crear.
Genera una imagen personalizada
Usará generate_custom_image.py, un programa de Python para crear una imagen personalizada de Dataproc.
Cómo funciona
El programa generate_custom_image.py
inicia una instancia de VM temporal de Compute Engine con la imagen base de Dataproc especificada 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, cierra la instancia de VM y crea una imagen personalizada de Dataproc 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 Dataproc.
El programa generate_custom_image.py
usa gcloud (predeterminado) para ejecutar flujos de trabajo de varios pasos en Compute Engine.
Ejecuta el código
Bifurcar o clonar los archivos en GitHub en Imágenes personalizadas de Dataproc.
Luego, ejecuta el programa generate_custom_image.py
para que Dataproc genere y guarde la imagen personalizada.
python generate_custom_image.py \ --image-name custom_image_name \ [--family custom_image_family_name] \ --dataproc-version Dataproc version (example: "1.5.10-debian10") \ --customization-script local path to your custom script \ --zone Compute Engine zone to use for the location of the temporary VM \ --gcs-bucket URI (gs://bucket-name) of a Cloud Storage bucket in your project \ [--no-smoke-test]
Marcas necesarias
--image-name
: Es el nombre de salida de tu imagen personalizada. Nota: El nombre de la imagen debe coincidir con la regex[a-z](?:[-a-z0-9]{0,61}[a-z0-9])
, por ejemplo, no debe contener guiones bajos ni espacios, y debe tener menos de 64 caracteres.--dataproc-version
: La versión de la imagen de Dataproc que se usará en la imagen personalizada. Especifica la versión en el formato "x.y.z-os" o "x.y.z-rc-os" por ejemplo, &1--customization-script
: una ruta de acceso local a tu secuencia de comandos que la herramienta ejecutará para instalar tus paquetes personalizados o realizar otras personalizaciones. Ten en cuenta que esta secuencia de comandos solo se ejecuta en la VM temporal que se usa para crear la imagen personalizada. Puedes especificar una secuencia de comandos de inicialización diferente para cualquier otra acción de inicialización que quieras realizar cuando creas un clúster con tu imagen personalizada.--zone
: la zona de Compute Engine en la quegenerate_custom_image.py
creará una VM temporal que usará para crear tu imagen personalizada.--gcs-bucket
: Un URI, en el formatogs://bucket-name
, que apunta al bucket de Cloud Storage que creaste en Crea un bucket de Cloud Storage en tu proyecto.generate_custom_image.py
escribirá los archivos de registro en este bucket.
Marcas opcionales:
--family
: Es la familia de imágenes de la imagen. 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-1-5-distribute10".--no-smoke-test
: Esta es una marca opcional que inhabilita la prueba de humo de la imagen personalizada recién compilada. La prueba de humo crea un clúster de prueba de Dataproc 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 Dataproc funcional. Si inhabilitas este paso mediante la marca--no-smoke-test
, se acelerará el proceso de compilación de la imagen personalizada, pero no se recomienda su uso.
Para obtener una lista de marcas opcionales adicionales, consulta Argumentos opcionales en GitHub.
Si el comando gcloud
tiene éxito, el imageURI
de la imagen personalizada aparecerá en la salida 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 versiones de imágenes personalizadas para usuarios avanzados
Cuando se usa la herramienta de imagen personalizada estándar de Dataproc, la herramienta establece de forma automática una etiqueta goog-dataproc-version
obligatoria en la imagen personalizada creada. La etiqueta refleja las capacidades y los protocolos de función que Dataproc usa para administrar el software en la imagen.
Los usuarios avanzados que usen su propio proceso para crear una imagen personalizada de Dataproc deben agregar la etiqueta de forma manual a su imagen personalizada, como se muestra a continuación:
Extrae la etiqueta
goog-dataproc-version
de la imagen base de Dataproc que se usa para crear la imagen personalizada.gcloud compute images describe ${BASE_DATAPROC_IMAGE} \ --project cloud-dataproc \ --format="value(labels.goog-dataproc-version)"
Configura la etiqueta en la imagen personalizada.
gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
Usa una imagen personalizada
La imagen personalizada se especifica cuando creas un clúster de Dataproc. Una imagen personalizada se guarda en Imágenes de Cloud Compute y es válida para crear un clúster de Dataproc por 60 días desde la fecha de su creación (consulta Cómo crear un clúster con una imagen personalizada vencida si quieres usar una imagen después de la fecha de vencimiento de 60 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/custom-image-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 familiar, 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
- URI parcial:
projects/project-id/global/images/family/custom-image-family-name
Cómo encontrar el URI de la imagen personalizada
Comando de gcloud
Ejecute el siguiente comando gcloud
para generar una lista de los nombres de sus imágenes personalizadas:
gcloud compute images list
Pasa el nombre de tu imagen personalizada al siguiente comando de gcloud
para enumerar el URI (selfLink
) de tu imagen personalizada:
gcloud compute images describe custom-image-name
... 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 Cloud Console y haz clic en el nombre de la imagen. Puedes insertar una consulta en el cuadro de texto para filtrar imágenes a fin de limitar el número de imágenes que se muestran.
- Se abre la página de detalles de imágenes. Haz clic en Equivalent REST (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/my-project-id/global/images/my-custom-image", "sourceDisk": ..., ... }
Crea un clúster con una imagen personalizada
Puedes crear un clúster con nodos principales y trabajadores que usan una imagen personalizada con la herramienta de línea de comandos de gcloud
, La API de Cloud Dataproc API o Google Cloud Platform Console.
Comando de gcloud
Puedes crear un clúster de Dataproc con una imagen personalizada mediante el comando de creación de clústeres de Dataproc con la marca--image
.
Ejemplo:
gcloud dataproc clusters create cluster-name \ --image=custom-image-URI \ --region=region \ ... other flags ...
API de REST
Puedes crear un clúster con una imagen personalizada si especificas el URI de imagen personalizado en el campo InstanceGroupConfig.imageUri enmasterConfig
, workerConfig
y, si corresponde, en el objeto secondaryWorkerConfig
incluido en una solicitud a la API de cluster.create.
Ejemplo: solicitud REST para crear un clúster de Dataproc estándar (un nodo maestro y dos trabajadores) con una imagen personalizada.
POST /v1/projects/project-id/regions/global/clusters/ { "clusterName": "custom-name", "config": { "masterConfig": { "imageUri": "projects/project-id/global/images/custom-image-name" }, "workerConfig": { "imageUri": "projects/project-id/global/images/custom-image-name" } } }
Console
- En Cloud Console, abre la página Create a cluster (Crear un clúster) de Dataproc. 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 quieres usar para el clúster de Dataproc y, luego, haz clic en SELECCIONAR.
Cuando envías el formulario Crear un clúster, las VM de tu clúster se aprovisionarán con la imagen personalizada seleccionada.
Anula las propiedades del clúster de Dataproc con una imagen personalizada
Puedes usar imágenes personalizadas para reemplazar las propiedades del clúster configuradas durante la creación del clúster. Si un usuario crea un clúster con tu imagen personalizada, pero establece propiedades en clúster diferentes de las que estableciste con tu imagen personalizada, la configuración de las propiedades del clúster de imagen personalizada tendrá prioridad.
Para configurar las propiedades del clúster con tu imagen personalizada, sigue estos pasos:
- En la secuencia de comandos de personalización de la imagen personalizada, crea un archivo
dataproc.custom.properties
en/etc/google-dataproc
y, luego, establece los valores de propiedad del clúster en el archivo.- Contenido del archivo
dataproc.custom.properties
de muestra:dataproc.conscrypt.provider.enable=value dataproc.logging.stackdriver.enable=value
- Contenido del archivo
Ejemplo de fragmento de creación de archivo de secuencia de comandos de personalización para anular dos propiedades del clúster:
cat <<EOF >/etc/google-dataproc/dataproc.custom.properties dataproc.conscrypt.provider.enable=true dataproc.logging.stackdriver.enable=false EOF
Cómo crear un clúster con una imagen personalizada vencida
De forma predeterminada, las imágenes personalizadas se vences a los 60 días desde 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 Dataproc 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 CLI de
gcloud
emitirá un mensaje de error que incluye el nombre de la propiedaddataproc:dataproc.custom.image.expiration.token
del clúster y el valor del token.dataproc:dataproc.custom.image.expiration.token=token value
Copia la string de “valor del token” al portapapeles.Usa la CLI de
gcloud
para volver a crear el clúster de Dataproc y agrega el valor del token copiado arriba 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.