Instala y ejecuta un notebook de Datalab en un clúster de Dataproc

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 GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Asegúrate de tener habilitada la facturación para tu proyecto de Google Cloud Platform. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita lasDataproc, Compute EngineAPIAPI.

    Habilita lasAPI

  5. Instala e inicializa el SDK de Cloud.

Resumen

En este instructivo, se muestra la creación de un clúster de Dataproc con una secuencia de comandos de inicialización de shell Bash que instala y ejecuta un notebook de Datalab en el clúster. La secuencia de comandos se encuentra en el depósito regional de Cloud Storage en gs://goog-dataproc-initialization-actions-<REGION>/datalab/datalab.sh y se ubica junto con otras secuencias de comandos de inicialización en el repositorio GitHub GoogleCloudDataproc/initialization-actions.

Después de crear el clúster con una secuencia de comandos de inicialización que instala el notebook de Datalab en el clúster, este instructivo te muestra cómo conectarte al notebook con tu navegador local.

#!/bin/bash

    set -exo pipefail

    readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"
    readonly PROJECT="$(/usr/share/google/get_metadata_value ../project/project-id)"
    readonly SPARK_PACKAGES="$(/usr/share/google/get_metadata_value attributes/spark-packages || true)"
    readonly SPARK_CONF='/etc/spark/conf/spark-defaults.conf'
    readonly DATALAB_DIR="${HOME}/datalab"
    readonly PYTHONPATH="/env/python:$(find /usr/lib/spark/python/lib -name '*.zip' | paste -sd:)"
    readonly DOCKER_IMAGE="$(/usr/share/google/get_metadata_value attributes/docker-image ||
      echo 'gcr.io/cloud-datalab/datalab:local')"

    readonly DEAFULT_INIT_ACTIONS_REPO=gs://dataproc-initialization-actions
    readonly INIT_ACTIONS_REPO="$(/usr/share/google/get_metadata_value attributes/INIT_ACTIONS_REPO ||
      echo ${DEAFULT_INIT_ACTIONS_REPO})"
    readonly INIT_ACTIONS_BRANCH="$(/usr/share/google/get_metadata_value attributes/INIT_ACTIONS_BRANCH ||
      echo 'master')"

    VOLUMES="$(echo /etc/{hadoop*,hive*,*spark*})"

    CONNECTORS_LIB=/usr/lib/hadoop/lib
    if [[ -d /usr/local/share/google/dataproc/lib ]]; then
      CONNECTORS_LIB="/usr/local/share/google/dataproc/lib"
    fi
    if [[ -L ${CONNECTORS_LIB}/gcs-connector.jar ]]; then
      VOLUMES+=" ${CONNECTORS_LIB}/gcs-connector.jar"
    else
      VOLUMES+=" $(compgen -G ${CONNECTORS_LIB}/gcs*)"
    fi
    if [[ -L ${CONNECTORS_LIB}/bigquery-connector.jar ]]; then
      VOLUMES+=" ${CONNECTORS_LIB}/bigquery-connector.jar"
    elif compgen -G "${CONNECTORS_LIB}/bigquery*" >/dev/null; then
      VOLUMES+=" $(compgen -G ${CONNECTORS_LIB}/bigquery*)"
    fi

    readonly VOLUMES
    readonly VOLUME_FLAGS="$(echo "${VOLUMES}" | sed 's/\S*/-v &:&/g')"

    function err() {
      echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2
      return 1
    }

    function install_docker() {
      local init_actions_dir
      init_actions_dir=$(mktemp -d -t dataproc-init-actions-XXXX)
      if [[ ${INIT_ACTIONS_REPO} == gs://* ]]; then
        gsutil -m rsync -r "${INIT_ACTIONS_REPO}" "${init_actions_dir}"
      else
        git clone -b "${INIT_ACTIONS_BRANCH}" --single-branch "${INIT_ACTIONS_REPO}" "${init_actions_dir}"
      fi
      find "${init_actions_dir}" -name '*.sh' -exec chmod +x {} \;
      "${init_actions_dir}/docker/docker.sh"
    }

    function docker_pull() {
      for ((i = 0; i < 10; i++)); do
        if (gcloud docker -- pull "$1"); then
          return 0
        fi
        sleep 5
      done
      return 1
    }

    function configure_master() {
      mkdir -p "${DATALAB_DIR}"

      docker_pull "${DOCKER_IMAGE}" || err "Failed to pull ${DOCKER_IMAGE}"

      if ! grep -q '^spark\.sql\.warehouse\.dir=' "${SPARK_CONF}"; then
        echo 'spark.sql.warehouse.dir=/root/spark-warehouse' >>"${SPARK_CONF}"
      fi

      touch ${VOLUMES}

      pyspark_submit_args=''
      for package in ${SPARK_PACKAGES//','/' '}; do
        pyspark_submit_args+="--packages ${package} "
      done
      pyspark_submit_args+='pyspark-shell'

      mkdir -p datalab-pyspark
      pushd datalab-pyspark
      cp /etc/apt/trusted.gpg .
      cp /etc/apt/sources.list.d/dataproc.list .
      cat <<EOF >Dockerfile
    FROM ${DOCKER_IMAGE}

    ADD dataproc.list /etc/apt/sources.list.d/
    ADD trusted.gpg /tmp/vm_trusted.gpg
    RUN apt-key add /tmp/vm_trusted.gpg

    RUN apt-get update
    RUN apt-get install -y software-properties-common
    RUN add-apt-repository 'deb http://archive.ubuntu.com/ubuntu bionic main'

    RUN apt-get update
    RUN apt-get install -y hive spark-python openjdk-8-jre-headless

    ENV PYSPARK_PYTHON=$(ls /opt/conda/bin/python || command -v python)

    ENV SPARK_HOME='/usr/lib/spark'
    ENV JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64'
    ENV PYTHONPATH='${PYTHONPATH}'
    ENV PYTHONSTARTUP='/usr/lib/spark/python/pyspark/shell.py'
    ENV PYSPARK_SUBMIT_ARGS='${pyspark_submit_args}'
    ENV DATALAB_ENV='GCE'
    EOF
      docker build -t datalab-pyspark .
      popd
    }

    function run_datalab() {
      if docker run -d --restart always --net=host \
        -v "${DATALAB_DIR}:/content/datalab" ${VOLUME_FLAGS} datalab-pyspark; then
        echo 'Cloud Datalab Jupyter server successfully deployed.'
      else
        err 'Failed to run Cloud Datalab'
      fi
    }

    function main() {
      if [[ "${ROLE}" == 'Master' ]]; then
        install_docker
        configure_master
        run_datalab
      fi
    }

    main

Crea un clúster y, luego, instala un notebook de Datalab

Comando de gcloud

  1. Ejecuta el siguiente comando gcloud dataproc clusters create de forma local en una ventana de la terminal o en Cloud Shell (Cloud Shell ejecuta Linux) para crear tu clúster y, luego, instalar tu notebook de Datalab en el nodo principal del clúster. Inserta los valores en los marcadores de posición cluster-name y project-id. La marca --initialization-actions especifica la ubicación en Cloud Storage, en la que se encuentra la secuencia de comandos de inicialización (consulta Acciones de inicialización para obtener más información).

    Linux/macOS

        REGION=<region>
        gcloud dataproc clusters create cluster-name \
            --project project-id \
            --initialization-actions \
                gs://goog-dataproc-initialization-actions-${REGION}/datalab/datalab.sh
        

    Windows

        REGION=<region>
        gcloud dataproc clusters create cluster-name ^
            --project project-id ^
            --initialization-actions ^
                gs://goog-dataproc-initialization-actions-${REGION}/datalab/datalab.sh
        

Console

  1. Ve a la página Clústeres de Dataproc de Cloud Console.
  2. Haz clic en Create cluster (Crear clúster) para abrir la página Create a cluster (Crea un clúster).
  3. Ingresa el nombre de tu clúster en el campo Name (Nombre).
  4. Selecciona una región y zona para el clúster en los menús desplegables Región y Zona (consulta Regiones y zonas disponibles). Puedes especificar una región distinta y seleccionar “Sin preferencia”, de modo que Dataproc elija una zona dentro de la región seleccionada para tu clúster (consulta Posición de zona automática de Dataproc). En su lugar, puedes seleccionar una región global, que es un espacio de nombres multirregión especial que puede implementar instancias en todas las zonas de Compute Engine de forma global (cuando seleccionas una región global, también debes seleccionar una zona).
  5. Expande el panel de Advanced options (Opciones avanzadas).
  6. Ingresa gs://goog-dataproc-initialization-actions-<REGION>/datalab/datalab.sh en el campo Acciones de inicialización. Esta secuencia de comandos, que instala y ejecuta un notebook de Datalab en la instancia principal del clúster, se ejecutará inmediatamente después de que se cree el clúster nuevo.
    Puedes copiar y pegar el URI del bloque de código que se muestra a continuación.
        gs://goog-dataproc-initialization-actions-<REGION>/datalab/datalab.sh
        
  7. Puedes mantener los valores predeterminados para todas las demás opciones.
  8. Haz clic en Crear para crear el clúster y, luego, instalar el notebook de Cloud Datalab en el nodo principal del clúster.

Abre el notebook de Datalab en tu navegador

Una vez que tu clúster esté en ejecución, sigue estos pasos para abrir el notebook de Datalab en tu navegador:

  1. Crea un túnel SSH. Si usas Cloud Shell con redirección de puertos local para crear el túnel SSH, especifica el puerto 8080 como el puerto de interfaz web en el nodo de la instancia principal del clúster.

  2. Configura tu navegador.

  3. Conéctate a la interfaz del notebook. Si usaste un proxy SOCKS con redirección de puertos dinámica para crear un túnel SSH, ingresa la siguiente URL en tu navegador a fin de conectarte a tu notebook: http://cluster-name-m:8080.

El notebook de Datalab se abre en la ventana de tu navegador.