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

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

注:

  • このドキュメントの説明は、Linux オペレーティング システムのみに適用されます。その他のオペレーティング システムは、今後の Dataproc リリースでサポートされる可能性があります。
  • カスタム イメージを構築するには、Dataproc ベースイメージから始める必要があります(Centos、Debian と Ubuntu のベースイメージがサポートされています)。
  • オプション コンポーネントの使用: デフォルトでは、カスタム イメージは、Dataproc のオプション コンポーネント(OS パッケージと構成ファイル)のすべてをベースイメージから継承します。デフォルトの OS パッケージ バージョンと構成ファイルはカスタマイズできますが、クラスタを作成する際にオプションのコンポーネント名を指定する必要があります(たとえば、gcloud dataproc clusters create --optional-components=component-name コマンドを実行して追加するオプション コンポーネントを確認します)。クラスタを作成する際にコンポーネント名を指定しない場合、コンポーネント(カスタムの OS パッケージと構成ファイルを含む)は削除されます。

始める前に

プロジェクトを設定する

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

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

    API を有効にする

  5. Cloud SDK をインストールして初期化します。
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  7. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  8. Dataproc API, Compute Engine API, and Cloud Storage API を有効にします。

    API を有効にする

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

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

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

    [ブラウザ] に移動

  2. [バケットを作成] をクリックします。
  3. [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
    • [バケットに名前を付ける] で、バケット名の要件を満たす名前を入力します。
    • [データの保存場所の選択] で、次の操作を行います。
      • [ロケーション タイプ] オプションを選択します。
      • [ロケーション] オプションを選択します。
    • [データのデフォルトのストレージ クラスを選択する] で、ストレージ クラスを選択します。
    • [オブジェクトへのアクセスを制御する方法を選択する] で [アクセス制御] オプションを選択します。
    • [詳細設定(省略可)] には、暗号化メソッド保持ポリシー、またはバケットラベルを指定します。
  4. [作成] をクリックします。

カスタム イメージの生成

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

仕組み

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

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

コードの実行

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

python generate_custom_image.py \
    --image-name custom_image_name \
    [--family custom_image_family_name] \
    --dataproc-version Dataproc version (example: "1.5.10-debian10") \
    --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: カスタム イメージで使用する Dataproc イメージ バージョン。バージョンは、「x.y.z-os」か「x.y.z-rc-os」の形式で指定します(例: 1.5.35-debian10)。
  • --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 は、このバケットにログファイルを書き込みます。

オプション フラグ

  • --family: イメージのイメージ ファミリー。イメージ ファミリーとは、類似したイメージをグループ化するために使用され、ファミリー内の最新イメージへのポインタとしてクラスタを作成するときに使用されます。たとえば、「custom-1-5-debian10」のように使用します。
  • --no-smoke-test: 新しくビルドされたカスタム イメージのスモークテストを無効にするオプション フラグ。スモークテストでは、新しく作成されたイメージを使用して Dataproc のテストクラスタが作成され、小さいジョブが実行され、テストの終了時にクラスタが削除されます。スモークテストは、新しく作成されたカスタム イメージによって正常に機能する 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.
#####################################################################

上級ユーザー向けのカスタム イメージ バージョン ラベル

Dataproc の標準カスタム イメージ ツールを使用する場合、このツールは作成されたカスタム イメージに必要な goog-dataproc-version ラベルを自動的に設定します。このラベルは、Dataproc でイメージ上のソフトウェアを管理するために使用される機能と能力を反映しています。

独自のプロセスを使用してカスタム Dataproc イメージを作成する上級ユーザーは、次のようにカスタム イメージに手動でラベルを追加する必要があります。

  1. カスタム イメージの作成に使用されるベース Dataproc イメージから goog-dataproc-version ラベルを抽出します。

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. カスタム イメージにラベルを設定します。

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

カスタム イメージの使用

Dataproc クラスタを作成するときに、カスタム イメージを指定します。 カスタム イメージは Cloud Compute イメージに保存され、作成日から 60 日間、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 で指定することもできます。これにより、イメージ ファミリー内の最新イメージが常に選択されます。

  1. 完全 URI:
    https://www.googleapis.com/compute/beta/projects/project-id/global/images/family/custom-image-family-name
  2. 部分 URI: projects/project-id/global/images/family/custom-image-family-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. Cloud 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 コマンドライン ツール、Dataproc API、Google Cloud Console を使用できます。

gcloud コマンド

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

REST API

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

例: カスタム イメージで標準の 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

  1. Cloud Console で、Dataproc の [クラスタの作成] ページを開きます。[クラスターを設定] パネルが選択されています。
  2. [バージョニング] セクションで、[変更] をクリックします。[カスタム イメージ] タブを選択し、Dataproc クラスタに使用するカスタム イメージを選択して、[選択] をクリックします。

[クラスタを作成] フォームを送信すると、選択したカスタム イメージとともに、クラスタの VM がプロビジョニングされます。

カスタム イメージを使用した Dataproc クラスタ プロパティのオーバーライド

カスタム イメージを使用して、クラスタの作成時に設定されたクラスタ プロパティを上書きできます。ユーザーがカスタム イメージを使用してクラスタを作成する場合に、カスタム イメージとは異なるクラスタ プロパティを設定すると、カスタム イメージ クラスタのプロパティ設定が優先されます。

カスタム イメージを使用してクラスタ プロパティを設定するには:

  1. カスタム イメージのカスタマイズ スクリプトで、/etc/google-dataprocdataproc.custom.properties ファイルを作成し、ファイルにクラスタのプロパティ値を設定します。
    • dataproc.custom.properties ファイル コンテンツの例:
      dataproc.conscrypt.provider.enable=value
      dataproc.logging.stackdriver.enable=value
      

2 つのクラスタ プロパティをオーバーライドするためのカスタマイズ スクリプト ファイル作成スニペットの例:

     cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
     dataproc.conscrypt.provider.enable=true
     dataproc.logging.stackdriver.enable=false
     EOF

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

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

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

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

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

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

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

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

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