初期化アクション

Cloud Dataproc クラスタを作成するときは、クラスタを設定した直後に Cloud Dataproc が Cloud Dataproc クラスタ内のすべてのノードで実行する初期化アクションとして実行可能ファイルまたはスクリプトを指定できます。初期化アクションは、ジョブの実行時に依存関係をインストールしなくてもジョブをクラスタに送信できるよう、Python パッケージのインストールなど、ジョブの依存関係を設定するために多く用いられます。

よく使用される初期化アクション スクリプトとその他のサンプルの初期化アクション スクリプトについては、次の場所で参照できます。

知っておきたい重要なこと

初期化アクションを作成または使用するときに知っておきたい重要なことがいくつかあります。

  • 初期化アクションは、クラスタの作成時に各ノードで実行されます。また、クラスタがスケールアップまたは自動的にスケールアップされるときも、新しく追加される各ノードで実行されます。手動でクラスタノードを再起動すると、そのノードで再び初期化アクションが実行されます。
  • 初期化アクションは root ユーザーとして実行します。つまり、sudo を使用する必要はありません
  • 初期化アクションでは絶対パスを使用する必要があります。
  • 初期化アクションでは、シバン行を使用してスクリプトの解釈方法を指定する必要があります(#!/bin/bash#!/usr/bin/python など)。
  • 初期化アクションがゼロ以外の終了コードで終了すると、クラスタ作成オペレーションは「ERROR」ステータスを報告します。初期化アクションをデバッグするには、クラスタの VM インスタンスに SSH 接続し、ログを確認します。初期化アクションの問題を修正したら、クラスタを削除のうえ再作成できます。
  • 内部 IP アドレスのみの Cloud Dataproc クラスタを作成した場合、NAT または VPN ゲートウェイ経由でトラフィックを送信するようにルートを構成していない限り、初期化アクションでインターネットにアクセスしようとしても失敗します。インターネットにアクセスできない場合、限定公開の Google アクセスを有効にして、Cloud Storage 内にジョブの依存関係を配置します。これにより、クラスタノードは内部 IP を使用して、Cloud Storage 内に配置された依存関係をダウンロードできます。
  • 初期化アクションの代わりに Cloud Dataproc カスタム イメージを使用して、ジョブの依存関係を設定することもできます。

初期化アクションの使用

クラスタ初期化アクションは、クラスタの作成方法に関係なく指定できます。

  • Google Cloud Platform Console を利用する
  • コマンドラインで gcloud コマンドライン ツールを使用する
  • Cloud Dataproc clusters.create API によるプログラムを使用する(NodeInitializationAction をご覧ください)

gcloud コマンド

gcloud dataproc clusters create コマンドでクラスタを作成するときは、--initialization-actions フラグを使用して、初期化実行可能ファイルやスクリプトが保管されている Cloud Storage の場所(URI)を指定します。このフラグを使用するための構文を以下に示します。この構文は gcloud dataproc clusters create --help を実行してコマンドラインから表示できます。

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --initialization-action-timeout timeout-value (default=10m) \
    ... other flags ...

オプションの --initialization-action-timeout フラグを使用して、初期化アクションのタイムアウト期間を指定できます。デフォルトのタイムアウト値は 10 分です。タイムアウト期間が終了するまでに初期化実行可能ファイルやスクリプトが完了しないと、Cloud Dataproc により初期化アクションがキャンセルされます。

REST API

clusters.create API リクエストの一部として、ClusterConfig.initializationActions 配列に 1 つ以上の NodeInitializationAction スクリプトまたは実行可能ファイルを指定します。

POST /v1/projects/my-project-id/regions/global/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "default",
      "zoneUri": "us-central1-b"
    },
    "masterConfig": {
      "numInstances": 1,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "workerConfig": {
      "numInstances": 2,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "initializationActions": [
      {
        "executableFile": "gs://cloud-example-bucket/my-init-action.sh"
      }
    ]
  }
}

Console

GCP Console でクラスタを作成するときは、Initialization actions 項目で 1 つ以上の初期化アクションを指定できます。この項目を表示するには、[詳細オプション] パネルを展開します。
このフォームでそれぞれの初期化アクションの Cloud Storage の場所を入力します。[参照] をクリックして GCP Console の [Cloud Storage ブラウザ] ページを開き、初期化ファイルを選択します。各初期化ファイルは別々に入力する必要があります(新しいエントリを追加するには、Enter キーを押します)。

初期化アクションに引数を渡す

Cloud Dataproc は、クラスタ内で実行されるインスタンスに対して特別なメタデータを設定します。初期化アクションに引数を渡す方法として、独自のカスタム メタデータを設定できます。

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --metadata name1=value1,name2=value2... \
    ... other flags ...

メタデータ値は、初期化アクション内で次のように読み取ることができます。

var1=$(/usr/share/google/get_metadata_value attributes/name1)

ノード選択

初期化アクションをマスターノードまたはワーカーノードに限定する場合は、単純なノード選択ロジックを実行可能ファイルまたはスクリプトに追加します。

ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  ... master specific actions ...
else
  ... worker specific actions ...
fi

バイナリのステージング

よくあるクラスタ初期化シナリオは、ジョブを送信するたびにジョブバイナリをステージングしなくてもよいようにクラスタでジョブバイナリをステージングすることです。たとえば、次の初期化スクリプトが gs://my-bucket/download-job-jar.sh(Cloud Storage バケットの場所)に保存されているとします。

#!/bin/bash
ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  gsutil cp gs://my-bucket/jobs/sessionalize-logs-1.0.jar home/username
fi

このスクリプトの場所を gcloud dataproc clusters create コマンドに渡すことができます。

gcloud dataproc clusters create my-dataproc-cluster \
    --initialization-actions gs://my-bucket/download-job-jar.sh

Cloud Dataproc は、すべてのノードに対してこのスクリプトを実行し、スクリプトのノード選択ロジックに従って jar をマスターノードにダウンロードします。送信したジョブでこの事前にステージングした jar を使用できます。

gcloud dataproc jobs submit hadoop \
    --cluster my-dataproc-cluster \
    --jar file:///home/username/sessionalize-logs-1.0.jar

初期化アクションのサンプル

よく使用される初期化アクション スクリプトとその他のサンプル初期化アクション スクリプトを公開 Cloud Storage バケット(gs://dataproc-initialization-actions)と GitHub リポジトリで公開しています。スクリプトを投稿するには、CONTRIBUTING.md のドキュメントを確認し、pull リクエストをお送りください。

ロギング

各初期化アクションの実行による出力は、インスタンスごとに /var/log/dataproc-initialization-script-X.log に記録されます。X は、各初期化アクション スクリプトに対しゼロから順につけられるインデックスです。たとえば、クラスタに 2 つの初期化アクションがある場合、出力は /var/log/dataproc-initialization-script-0.log/var/log/dataproc-initialization-script-1.log に記録されます。

次のステップ

次の初期化アクションの詳細を確認します。

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

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

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