Crea una imagen personalizada de Cloud Dataproc

Los clústeres de Cloud 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 Cloud Dataproc.

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. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

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

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Cloud Dataproc API, Compute Engine API y Cloud Storage API necesarias.

    Habilita las API

  5. Realiza la instalación y la inicialización del SDK de Cloud.
  6. Instala Python 2.7 y versiones posteriores.
  7. Descarga Daisy y cambia sus atributos para que se puedan ejecutar una vez que se ejecuta el comando siguiente:
    chmod +x daisy

Crea un depósito de Cloud Storage en tu proyecto

  1. En GCP Console, dirígete al navegador de Cloud Storage.

    Ir al navegador de Cloud Storage

  2. Haz clic en Crear depósito.
  3. En el diálogo Crear depósito especifica los siguientes atributos:
  4. Haz clic en Crear.

Genera una imagen personalizada

Usarás generate_custom_image.py, un programa de Python para crear y transmitir un archivo de imagen de Compute Engine a un depósito de Cloud Storage.

Cómo funciona

El programa de Python generate_custom_image.py usa Daisy, una herramienta para ejecutar flujos de trabajo de varios pasos en Compute Engine, a fin de crear una imagen personalizada. El programa inicia una instancia de VM de Compute Engine temporal que usa para crear una imagen personalizada de Cloud Dataproc que incluye tus paquetes personalizados. La imagen personalizada se guarda y se puede usar para crear clústeres de Cloud Dataproc. La VM temporal se borra después de que se crea la imagen personalizada.

Ejecuta el código

Bifurca o clona los archivos en GitHub en GoogleCloudPlatform/cloud-dataproc/custom-images/. Después, ejecuta el programa generate_custom_image.py para que Cloud Dataproc genere y guarde tu imagen personalizada.

python generate_custom_image.py \
    --image-name custom_image_name \
    --dataproc-version Cloud Dataproc version (example: "1.2.22") \
    --customization-script local path to your custom script \
    --daisy-path local path to the downloaded daisy binary \
    --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: "true" or "false" (default: "false"]

Marcas necesarias

  • --image-name: el nombre de resultado de tu imagen personalizada (sin espacios; se permiten guiones bajos)
  • --dataproc-version: la versión de la imagen de Cloud Dataproc para usar en tu imagen personalizada. Especifica la versión en formato “x.y.z”, por ejemplo, “1.2.22”.
  • --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.
  • --daisy-path: una ruta de acceso local al daisy binario que descargaste en Antes de comenzar.
  • --zone: la zona de Compute Engine donde generate_custom_image.py creará una VM temporal para usar tu imagen personalizada.
  • --gcs-bucket: un URI en formato gs://bucket-name que apunta al depósito Cloud Storage que creaste en Crea un depósito de Cloud Storage en tu proyecto. generate_custom_image.py escribirá los archivos de registro en este depósito.

Marcas opcionales

  • --no-smoke-test: valor predeterminado: “falso”. Esta es una marca opcional que se puede establecer en “verdadero” para inhabilitar las pruebas de humo en la imagen personalizada recién creada. La prueba de humo crea un clúster de prueba de Cloud 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 Cloud Dataproc funcional. Si inhabilitas este paso, se acelerará el proceso de creación de la imagen personalizada, pero esto no es recomendable.

Si el comando de 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 debajo:

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

Usa una imagen personalizada

La imagen personalizada se especifica cuando creas un clúster de Cloud Dataproc. Una imagen personalizada se guarda en Imágenes de Cloud Compute y es válida para crear un clúster de Cloud Dataproc por 30 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 30 días).

URI de la imagen personalizada

El imageUri de la imagen personalizada lo pasas 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

Cómo encontrar el URI de la imagen personalizada

Comando de gcloud

Ejecuta el comando de gcloud siguiente para hacer una lista con los nombres de tus imágenes personalizadas:

gcloud compute images list

Pasa el nombre de tu imagen personalizada al comando de gcloud siguiente para hacer una lista con los 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→Images (Compute Engine→Imágenes) en GCP 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 Cloud Dataproc API o Google Cloud Platform Console.

Comando de gcloud

Puedes crear un clúster de Cloud 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 \
    ... other flags ...

API de REST

Puedes crear un clúster con una imagen personalizada mediante la especificación del URI de la imagen personalizada en el campo InstanceGroupConfig.imageUri en el objeto masterConfig, workerConfig, y, si corresponde, en el objeto secondaryWorkerConfig que se incluye en una solicitud de API cluster.create.

Ejemplo: solicitud REST para crear un clúster de Cloud 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

Puedes crear un clúster que usa una imagen personalizada desde la página de Cloud Dataproc [Create a cluster] (Crear un cluster) (https://console.cloud.google.com/dataproc/clustersAdd) de GCP Console.
  1. Abre el menú desplegable Advanced options (Opciones avanzadas) en la parte inferior del formulario.
  2. En la sección Image (Imagen), haz clic en Change (Cambiar).
  3. Selecciona la pestaña Custom Image (Imagen personalizada), selecciona la imagen personalizada que quieres usar para tu clúster de Cloud Dataproc y, luego, haz clic en Select (Seleccionar).
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 30 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 Cloud 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 \
        ... other flags ...
    

  2. La herramienta gcloud emitirá un mensaje de error que incluye el nombre de la propiedad dataproc: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.

  3. Usa la herramienta gcloud para crear de nuevo el clúster de Cloud Dataproc con el “valor del token” copiado arriba agregado 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 \
        ... other flags ...
    

La creación del clúster con la imagen personalizada debería tener éxito.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Dataproc
Si necesitas ayuda, visita nuestra página de asistencia.