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 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 Cloud Dataproc futuras.
  • Las compilaciones de imágenes personalizadas requieren que se comience desde una imagen base de Dataproc (actualmente, se admiten las imágenes base de Debian y Ubuntu).

Antes de comenzar

Configura tu proyecto

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

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

    Habilita las API

  5. Instala e inicializa el SDK de Cloud.
  6. Instala Python 2.7 y versiones posteriores.
  7. Prepara una secuencia de comandos de personalización que instale paquetes personalizados o actualice 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 depósito de Cloud Storage en tu proyecto

  1. En Cloud Console, ve a la página Navegador de Cloud Storage.

    Ir a la página del navegador de Cloud Storage

  2. Haz clic en Crear depósito.
  3. En el diálogo Crear bucket, especifica los siguientes atributos:
  4. Haz 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 temporal de VM 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 configuraciones. Una vez que finaliza la secuencia de comandos de personalización, se cierra la instancia de VM y se crea una imagen personalizada de Dataproc 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 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

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 guarde tu 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 hay guiones bajos ni espacios, menos de 64 caracteres.
  • --dataproc-version: La versión de imagen de Dataproc para usar en tu imagen personalizada. Especifica la versión en formato “xyz-os” o “xyz-rc-os”, por ejemplo, “1.5.10-debian10”, “1.5.10-ubuntu18”, “1.5.0-RC10-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: Un URI, en el formato gs://bucket-name, que apunta al depósito de Cloud Storage que creaste en Crea un depósito de Cloud Storage en tu proyecto. generate_custom_image.py escribirá archivos de registro en este depósito.

Marcas opcionales:

  • --family: 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-debian10”.
  • --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 Dataproc con la imagen recién creada, 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 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 las marcas opcionales adicionales, consulta Argumentos opcionales en GithHub.

Si el comando gcloud tiene éxito, el imageURI de la imagen personalizada aparecerá en la lista 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 personalizada para usuarios avanzados

Cuando se utiliza 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 las funciones que usa Dataproc para administrar el software de la imagen.

Los usuarios avanzados que usan su propio proceso para crear una imagen de Dataproc personalizada deben agregar la etiqueta manualmente a su imagen personalizada de la siguiente manera:

  1. Extrae la etiqueta goog-dataproc-version de la imagen base de Dataproc usada para crear la imagen personalizada.

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

  2. 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 durante 60 días a partir de su fecha de creación (consulta Cómo crear un un clúster con una imagen personalizada vencida para usar una imagen personalizada después de su 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:

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/custom-image-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 mediante 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
  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 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.
  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/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 Dataproc o Google Cloud 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 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 principal y dos nodos 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

  1. En Cloud Console, abre la página Create a cluster (Crear un clúster) de Dataproc. Se selecciona el panel Configurar clúster.
  2. En la sección Control de versiones, haga clic en CAMBIAR. Seleccione la pestaña IMAGEN PERSONALIZADO, seleccione la imagen personalizada que usará para su clúster de Dataproc y haga clic en SELECT.

Cuando envías el formulario Crear un clúster, las VM de tu clúster se aprovisionarán con la imagen personalizada seleccionada.

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.

  1. 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 ...
    

  2. La herramienta gcloud emitirá un mensaje de error que incluye el nombre de la propiedad del cluster dataproc:dataproc.custom.image.expiration.token y el valor del token.

    dataproc:dataproc.custom.image.expiration.token=token value
    
    Copia la string de “valor del token” al portapapeles.

  3. Usa la herramienta de gcloud para volver a crear el clúster de Dataproc y agrega el "valor del token" copiado 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.