Cloud Dataproc クラスタで Cloud Datalab ノートブックをインストールして実行する

プロジェクトを設定する

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. Cloud Dataproc, Compute Engine API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。

概要

このチュートリアルでは、クラスタに Cloud Datalab ノートブックをインストールして実行する bash シェル初期化スクリプトを使用して Cloud Dataproc クラスタを作成する方法を説明します。このスクリプトは Cloud Storage(gs://dataproc-initialization-actions/datalab/datalab.sh)にあります。また、GitHub GoogleCloudPlatform/dataproc-initialization-actions リポジトリにも他の初期化スクリプトとともに格納されています。

クラスタに Cloud Datalab ノートブックをインストールする初期化スクリプトを使用してクラスタを作成した後、このチュートリアルでは、ローカル ブラウザでノートブックに接続する方法を説明します。

#!/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 .
  if [[ -f /etc/apt/sources.list.d/backports.list ]]; then
    cp /etc/apt/sources.list.d/backports.list .
    ADD_BACKPORTS='ADD backports.list /etc/apt/sources.list.d/'
  else
    ADD_BACKPORTS=''
  fi
  cp /etc/apt/sources.list.d/dataproc.list .
  cat <<EOF >Dockerfile
FROM ${DOCKER_IMAGE}
${ADD_BACKPORTS}
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 openjdk-8-jre-headless
RUN apt-get install -y --allow-unauthenticated hive spark-python

ENV PYSPARK_PYTHON=$(ls /opt/conda/bin/python || command -v 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() {
  if [[ "${ROLE}" == 'Master' ]]; then
    install_docker
    configure_master
    run_datalab
  fi
}

main

クラスタを作成し、Cloud Datalab ノートブックをインストールする

gcloud コマンド

  1. 次の gcloud dataproc clusters create コマンドをターミナル ウィンドウでローカルに実行するか、Cloud Shell(Cloud Shell は Linux を稼働)で実行してクラスタを作成し、クラスタのマスターノードに Cloud Datalab ノートブックをインストールします。cluster-name と project-id の各プレースホルダの値を挿入します。--initialization-actions フラグは、Cloud Storage 内で初期化スクリプトが配置される場所を指定します(詳しくは、初期化アクションをご覧ください)。

    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. GCP Console の [Cloud Dataproc クラスタ] ページに移動します。
  2. [クラスタを作成] をクリックして、[クラスタの作成] ページを開きます。
  3. クラスタの名前を [名前] 項目に入力します。
  4. クラスタのリージョンとゾーンを [リージョン] および [ゾーン] メニューで選択します(使用可能なリージョンとゾーンをご覧ください)。デフォルトは global リージョンです。これは特別なマルチリージョンの名前空間であり、すべての Compute Engine ゾーンにインスタンスをグローバルにデプロイできます。また、個別のリージョンを指定し、ゾーンとして [指定しない] を選択すると、選択したリージョン内のゾーンが Cloud Dataproc により選択されます(Cloud Dataproc の自動ゾーン プレースメントをご覧ください)。
  5. [詳細オプション] パネルを展開します。
  6. [初期化アクション] フィールドに「gs://dataproc-initialization-actions/datalab/datalab.sh」と入力します。このスクリプトは、クラスタのマスター インスタンスで Cloud Datalab ノートブックをインストールおよび実行します。また、このスクリプトは新しいクラスタを作成した直後に実行されます。
    URI は以下のコードブロックからコピーして貼り付けることができます。
    gs://dataproc-initialization-actions/datalab/datalab.sh
    
  7. 他のオプションはいずれも設定されたデフォルト値を使用できます。
  8. [作成] をクリックして、クラスタを作成し、そのクラスタのマスターノードに Cloud Datalab ノートブックをインストールします。

ブラウザで Cloud Datalab ノートブックを開く

クラスタの実行後、次の手順を行って、ブラウザに Cloud Datalab ノートブックを開きます。

  1. SSH トンネルを作成します。Cloud Shell をローカルポート転送で使用して SSH トンネルを作成する場合は、クラスタのマスターノード上のウェブ インターフェース ポートとしてポート 8080 を指定します。

  2. ブラウザを構成します

  3. ノートブック インターフェースに接続します。動的ポート転送で SOCKS プロキシを使用して SSH トンネルを作成する場合は、ブラウザに URL「http://cluster-name-m:8080」を入力してノートブックに接続します。

Cloud Datalab ノートブックがブラウザのウィンドウで開きます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Dataproc ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。