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

Configura tu proyecto

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

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

    Habilita las API

  5. Install and initialize the Cloud SDK.

Descripción general

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

Después de crear el clúster con una secuencia de comandos de inicialización que instala el notebook de Cloud Datalab en el clúster, en este instructivo, podrás ver 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 INIT_ACTIONS_REPO="$(/usr/share/google/get_metadata_value attributes/INIT_ACTIONS_REPO \
  || echo 'https://github.com/GoogleCloudPlatform/dataproc-initialization-actions.git')"
readonly INIT_ACTIONS_BRANCH="$(/usr/share/google/get_metadata_value attributes/INIT_ACTIONS_BRANCH \
  || echo 'master')"

readonly VOLUMES="$(echo /etc/{hadoop*,hive*,*spark*} /usr/lib/hadoop/lib/{gcs,bigquery}*)"
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() {
  git clone -b "${INIT_ACTIONS_BRANCH}" --single-branch "${INIT_ACTIONS_REPO}"
  chmod +x ./dataproc-initialization-actions/docker/docker.sh
  ./dataproc-initialization-actions/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/backports.list .
  cp /etc/apt/sources.list.d/dataproc.list .
  cat << EOF > Dockerfile
FROM ${DOCKER_IMAGE}
ADD backports.list /etc/apt/sources.list.d/
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 hive spark-python openjdk-8-jre-headless

ENV PYSPARK_PYTHON=$(ls /opt/conda/bin/python || which python)

ENV SPARK_HOME='/usr/lib/spark'
ENV JAVA_HOME='${JAVA_HOME}'
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(){
  install_docker

  if [[ "${ROLE}" == 'Master' ]]; then
    configure_master
    run_datalab
  fi
}

main

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

Comando de gcloud

  1. Ejecuta el comando gcloud dataproc clusters create que se muestra a continuación de forma local en una ventana de la terminal o en Cloud Shell(Cloud Shell se ejecuta en Linux) para crear tu clúster y luego instalar tu notebook de Cloud 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

    gcloud dataproc clusters create cluster-name \
        --project project-id \
        --initialization-actions \
            gs://dataproc-initialization-actions/datalab/datalab.sh
    

    Windows

    gcloud dataproc clusters create cluster-name ^
        --project project-id ^
        --initialization-actions ^
            gs://dataproc-initialization-actions/datalab/datalab.sh
    

Console

  1. Dirígete a la página Clústeres de Cloud Dataproc en GCP Console.
  2. Haz clic en Create cluster (Crear clúster) para abrir la página Create a cluster (Crear 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 Region (Región) y Zone (Zona) (consulta Regiones y zonas disponibles). La región global, que es la predeterminada, es un espacio de nombres especial multirregión capaz de implementar instancias en todas las zonas de Compute Engine a nivel mundial. También puedes especificar una región determinada y seleccionar “No preference” (Sin preferencia) a fin de que la zona permita que Cloud Dataproc elija una zona dentro de la región seleccionada para tu clúster (consulta Ubicación de zona automática de Cloud Dataproc).
  5. Expande el panel de Advanced options (Opciones avanzadas).
  6. Escribe gs://dataproc-initialization-actions/datalab/datalab.sh en el campo Initialization actions (Acciones de inicialización). Esta secuencia de comandos, que instala y luego ejecuta un notebook de Cloud Datalab en la instancia principal del clúster, se ejecutará de forma inmediata tras la creación del clúster nuevo.
    Puedes copiar y pegar el URI del bloque de código que se muestra a continuación.
    gs://dataproc-initialization-actions/datalab/datalab.sh
    
  7. Puedes mantener los valores predeterminados para todas las demás opciones.
  8. Haz clic en Create (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 Cloud Datalab en tu navegador

Una vez que tu clúster se encuentre en ejecución, realiza los siguientes pasos para abrir el notebook de Cloud 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 principal del clúster.

  2. Configura tu navegador.

  3. Conéctate a la interfaz del notebook. Si usaste un proxy de 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 Cloud Datalab se abre en la ventana de tu navegador.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Cloud Dataproc
¿Necesitas ayuda? Visita nuestra página de asistencia.