Crea una imagen personalizada de Dataproc

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 desde una imagen base de Dataproc ( 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

Configura tu proyecto

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de Dataproc API, Compute Engine API, and Cloud Storage.

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de Dataproc API, Compute Engine API, and Cloud Storage.

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  12. Instala Python 3.11 y versiones posteriores.
  13. Preparar una secuencia de comandos de personalización que instale paquetes personalizados actualiza los 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 depósito de Cloud Storage en tu proyecto

  1. En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.

    Ir a la página Buckets

  2. Haga clic en Crear bucket.
  3. En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, haz clic en Continuar.
  4. 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 lanza una prueba Instancia de VM de Compute Engine con el Dataproc especificado imagen base y, luego, ejecuta la secuencia de comandos de personalización en la instancia de VM que se instalará paquetes personalizados o actualizar configuraciones. Después de la secuencia de comandos de personalización finaliza, apaga la instancia de VM y crea una instancia del disco de la instancia de VM. La VM temporal se borra después de se crea una 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 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 Dataproc. Luego, ejecuta el programa generate_custom_image.py para que Dataproc genere y guarda 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. Nota: El nombre de la imagen debe coincidir con la regex [a-z](?:[-a-z0-9]{0,61}[a-z0-9]), por ejemplo, sin guiones bajos ni espacios, y deben tener menos de 64 caracteres.
  • --dataproc-version: Es la versión de imagen de Dataproc que se usará. en tu imagen personalizada. Especifica la versión en “x.y.z-os” o "x.y.z-rc-os" formato, por ejemplo, “2.0.69-debian10”. .
  • --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 que generate_custom_image.py creará una VM temporal que usará para crear tu imagen personalizada.
  • --gcs-bucket: Es un URI, en el formato gs://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 entre sí y se pueden usar cuando se crea un clúster como un puntero para la imagen más reciente de la familia. Por ejemplo, “custom-1-5-debian10”.
  • --no-smoke-test: esta es una marca opcional que inhabilita las pruebas de humo en el recién creada. La prueba de humo crea una prueba de Dataproc clúster con la imagen recién compilada, ejecuta un trabajo pequeño y, luego, borra 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 crear un clúster clúster. Si inhabilitas este paso con la marca --no-smoke-test, se acelerará el proceso 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 Dataproc. Si tu proyecto forma parte de Una VPC compartida, debes especificar la URL de la subred completa en el siguiente formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Para ver una lista de marcas opcionales adicionales, consulta Argumentos opcionales en GitHub.

Si generate_custom_image.py funciona correctamente, el imageURI de la imagen personalizada , 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 con imágenes personalizadas para usuarios avanzados

Cuando se usa la herramienta de imagen personalizada estándar de Dataproc, la herramienta establece automáticamente una etiqueta goog-dataproc-version obligatoria en los archivos personalizada. La etiqueta refleja las capacidades de las funciones y los protocolos que usan Dataproc para administrar el software de la imagen.

Usuarios avanzados que usan sus propios procesos para crear un Dataproc personalizado debe agregar la etiqueta manualmente a su imagen personalizada, de la siguiente manera:

  1. Extrae la etiqueta goog-dataproc-version de la base de Dataproc que se usó para crear la imagen personalizada.

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. 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 Dataproc. Una imagen personalizada se guarda en Imágenes de Cloud Compute y es válido para crear un clúster de Dataproc por 365 días a partir de su fecha de creación (consulta Cómo crear 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

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:

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI parcial: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. 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.

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. 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

  1. Abre el Compute Engine→Imágenes en la consola de Google Cloud 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.
  2. Se abre la página de detalles de imágenes. Haz clic en Equivalent REST (REST equivalente).
  3. 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

Puedes crear un clúster con nodos principales y trabajadores que usan una imagen personalizada con la línea de comandos de gcloud la API de Dataproc o la consola de Google Cloud.

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 personalizada en el campo InstanceGroupConfig.imageUri en el objeto masterConfig, workerConfig y, si corresponde, secondaryWorkerConfig en una solicitud a la API 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/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

  1. En la consola de Google Cloud, abre Dataproc Crea un clúster . Se selecciona el panel Configurar clúster.
  2. En la sección Control de versiones, haz clic en CAMBIAR. Selecciona la pestaña IMAGEN PERSONALIZADA y elige la imagen personalizada que quieres usar. para tu 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 propiedades del clúster se establecen durante la creación del clúster. Si un usuario crea un clúster con tu imagen personalizada, pero establece propiedades de clúster diferentes de las que estableciste con tu imagen personalizada, la configuración de propiedad de clúster de imágenes personalizadas se tienen prioridad.

Para establecer propiedades de clúster con tu imagen personalizada, haz lo siguiente:

  1. 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 de ejemplo del archivo dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Ejemplo de fragmento de creación de archivos de secuencia de comandos de personalización para anular dos 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 caducan 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.

  1. Intenta crear un clúster de Dataproc con un clúster personalizado vencido o una imagen personalizada que vencerá en 10 días.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    

  2. gcloud CLI emitirá un mensaje de error que incluye las nombre de la propiedad del clúster dataproc:dataproc.custom.image.expiration.token y el valor del token.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    Copia el "valor del token". al portapapeles.

  3. Usa gcloud CLI para volver a crear el clúster de Dataproc. agregar el "valor del token" se copió anteriormente 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.