Cloud Dataproc カスタム イメージの作成

Cloud Dataproc クラスタには、ユーザーがプリインストールしたパッケージを含むカスタム イメージをプロビジョニングできます。次の手順では、カスタム イメージを作成して、Cloud Dataproc クラスタにインストールする方法について説明しています。

注:

  • このドキュメントの説明は、Linux オペレーティング システムのみに適用されます。その他のオペレーティング システムは、今後の Cloud Dataproc リリースでサポートされる可能性があります。
  • カスタム イメージを構築するには、Cloud Dataproc ベースイメージから始める必要があります(現在、Debian と Ubuntu のベースイメージがサポートされています)。

始める前に

プロジェクトの設定

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

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

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

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

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

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

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。
  6. Python 2.7+ をインストールします。
  7. カスタム パッケージのインストールまたは構成の更新を行うカスタマイズ スクリプトを準備します。たとえば、次のようにします。
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

プロジェクトで Cloud Storage バケットを作成する

  1. GCP Console で、Cloud Storage ブラウザページに移動します。

    Cloud Storage ブラウザページに移動

  2. [バケットを作成] をクリックします。
  3. [バケットを作成] ダイアログ内で、以下の属性を指定します。
  4. [作成] をクリックします。

カスタム イメージの生成

Python プログラムの generate_custom_image.py を使用して、Cloud Dataproc カスタム イメージを作成します。

仕組み

generate_custom_image.py プログラムは、指定された Cloud Dataproc ベースイメージを使用して一時的な Compute Engine VM インスタンスを起動し、VM インスタンス内でカスタマイズ スクリプトを実行して、カスタム パッケージのインストールと構成の更新を行います。カスタマイズ スクリプトが完了すると、VM インスタンスがシャットダウンされ、VM インスタンスのディスクから Cloud Dataproc カスタム イメージが作成されます。一時的な VM は、カスタム イメージの作成後に削除されます。カスタム イメージは保存され、Cloud Dataproc クラスタを作成するために使用できます。

generate_custom_image.py プログラムは、gcloud(デフォルト)を使用して Compute Engine で複数ステップのワークフローを実行します。

コードの実行

GitHub の GoogleCloudPlatform/dataproc-custom-images で、ファイルを fork またはクローニングします。次に、generate_custom_image.py プログラムを実行して、Cloud Dataproc によりカスタム イメージを生成し、保存します。

python generate_custom_image.py \
    --image-name custom_image_name \
    --dataproc-version Cloud Dataproc version (example: "1.4.5-debian9") \
    --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]
python generate_custom_image.py \
    --image-name custom_image_name \
    --dataproc-version Cloud Dataproc version (example: "1.4.5-debian9") \
    --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]

必須フラグ

  • --image-name: カスタム イメージの出力名。注: イメージ名は、正規表現 [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) と一致する必要があります。たとえば、アンダースコアやスペースは使用できません。また、63 文字以下にする必要があります。
  • --dataproc-version: カスタム イメージで使用する Cloud Dataproc イメージ バージョン。バージョンを x.y.z-os または x.y.z-rc-os の形式で指定します(例: 1.4.5-debian9、1.4.5-ubuntu18、1.4.0-RC10-debian9)。
  • --customization-script: ツールを実行したときに、カスタム パッケージのインストールや、その他のカスタマイズが行われるスクリプトのローカルパス。このスクリプトは、カスタム イメージを作成するために一時的な VM でのみ実行されることに注意してください。カスタム イメージを使用してクラスタを作成するときに実行するその他の初期化アクションには、異なる初期化スクリプトを指定できます。
  • --zone: Compute Engine ゾーンgenerate_custom_image.py は、カスタム イメージを作成するために使用する一時的な VM をこのゾーンに作成します。
  • --gcs-bucket: gs://bucket-name 形式の URI。これは、プロジェクトで Cloud Storage バケットを作成するで作成した Cloud Storage バケットを指します。generate_custom_image.py は、このバケットにログファイルを書き込みます。

オプション フラグ

  • --no-smoke-test: 新しくビルドされたカスタム イメージのスモークテストを無効にするオプションのフラグ。スモークテストでは、新しく作成されたイメージを使用して Cloud Dataproc のテストクラスタが作成され、小さいジョブが実行され、テストの終了時にクラスタが削除されます。スモークテストは、新しく作成されたカスタム イメージによって正常に機能する Cloud Dataproc クラスタを作成できることを検証するために、デフォルトで実行されます。--no-smoke-test フラグを使用すると、この手順を無効にできます。無効にすると、カスタム イメージのビルドプロセスは速くなりますが、おすすめしません。

追加のオプション フラグのリストについては、GithHub のオプションの引数をご覧ください。

gcloud コマンドが正常に実行されると、カスタム イメージの imageURI がターミナル ウィンドウの出力に一覧表示されます(完全な imageUri太字で示されています)。

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

カスタム イメージの使用

Cloud Dataproc クラスタを作成するときに、カスタム イメージを指定します。カスタム イメージは Cloud Compute イメージに保存され、作成日から 60 日間、Cloud Dataproc クラスタの作成に利用できます(60 日間の有効期限後にカスタム イメージを使用する方法については、期限切れのカスタム イメージを使用してクラスタを作成する方法をご覧ください)。

カスタム イメージの URI

カスタム イメージの imageUri をクラスタ作成オペレーションに渡します。この URI は、次の 3 つのいずれかの方法で指定できます。

  1. 完全 URI:
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/custom-image-name
  2. 部分 URI: projects/project-id/global/images/custom-image-name
  3. 省略名: custom-image-name

カスタム イメージ URI の検索方法

gcloud コマンド

次の gcloud コマンドを実行して、カスタム イメージの名前を一覧表示します。

gcloud compute images list

カスタム イメージの名前を次の gcloud コマンドに渡し、カスタム イメージの URI(selfLink)を一覧表示します。

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. GCP Console で [Compute Engine] → [イメージ] ページを開き、イメージの名前をクリックします。イメージのフィルタ用テキスト ボックスにクエリを挿入して、表示されるイメージの数を制限できます。
  2. イメージの詳細ページが開きます。[同等の REST] をクリックします。
  3. REST レスポンスには、イメージの URI である selfLink など、イメージに関する詳細情報が一覧表示されます。
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/my-project-id/global/images/my-custom-image",
      "sourceDisk": ...,
      ...
    }
    

カスタム イメージを使用したクラスタの作成

カスタム イメージを使用したマスターノードとワーカーノードからなるクラスタを作成するには、gcloud コマンドライン ツール、Cloud Dataproc API、Google Cloud Platform Console を使用できます。

gcloud コマンド

カスタム イメージで Cloud Dataproc クラスタを作成するには、--image フラグを指定した dataproc clusters create コマンドを使用します。 例:
gcloud dataproc clusters create cluster-name \
    --image=custom-image-URI \
    ... other flags ...

REST API

カスタム イメージを使用してクラスタを作成するには、cluster.create API リクエストに含まれる masterConfigworkerConfig、および該当する場合は secondaryWorkerConfig の各オブジェクトで、InstanceGroupConfig.imageUri フィールドにカスタム イメージの URI を指定します。

例: カスタム イメージで標準の Cloud Dataproc クラスタ(1 つのマスターノード、2 つのワーカーノード)を作成するための REST リクエスト。

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

GCP Console の Cloud Dataproc(クラスタの作成)(https://console.cloud.google.com/dataproc/clustersAdd)ページから、カスタム イメージを使用するクラスタを作成できます。
  1. フォームの下部にある [詳細オプション] 展開ボタンを開きます。
  2. [イメージ] セクションで、[変更] をクリックします。
  3. [カスタム イメージ] タブを選択し、Cloud Dataproc クラスタに使用するカスタム イメージを選択して、[選択] をクリックします。
[クラスタを作成] フォームを送信すると、選択したカスタム イメージとともに、クラスタの VM がプロビジョニングされます。

期限切れのカスタム イメージを使用してクラスタを作成する方法

デフォルトで、カスタム イメージはイメージの作成日から 60 日後に期限切れになります。次の手順に従って、期限切れのカスタム イメージを使用するクラスタを作成できます。

  1. 期限切れのカスタム イメージ、または 10 日以内に期限切れになるカスタム イメージを使用して、Cloud Dataproc クラスタの作成を試みます。

    gcloud dataproc clusters create cluster-name \
        --image=custom-image-name \
        ... other flags ...
    

  2. gcloud ツールによって、クラスタ dataproc:dataproc.custom.image.expiration.token のプロパティ名とトークン値が含まれたエラー メッセージが発行されます。

    dataproc:dataproc.custom.image.expiration.token=token value
    
    「トークン値」の文字列をクリップボードにコピーします。

  3. gcloud ツールを使用して、上記でコピーした「トークン値」をクラスタのプロパティとして追加し、Cloud Dataproc クラスタをもう一度作成します。

    gcloud dataproc clusters create cluster-name \
        --image=custom-image-name \
        --properties dataproc:dataproc.custom.image.expiration.token=token value \
        ... other flags ...
    

これで、このカスタム イメージを使用してクラスタを作成できます。

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

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

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