ジョブの送信

既存の Cloud Dataproc クラスタにジョブを送信するには、いくつかの方法があります。たとえば、Cloud Dataproc API の jobs.submit を HTTP リクエストまたはプログラム リクエストで使用します。また、ローカル ターミナル ウィンドウまたは Cloud Shell で Cloud SDK の gcloud コマンドライン ツールを使用することも、ローカル ブラウザで Google Cloud Platform Console を開いて送信することもできます。また、クラスタ内のマスター インスタンスに SSH で接続し、Cloud Dataproc サービスを使用せずにインスタンスから直接ジョブを実行することもできます。

Cloud Dataproc ジョブの送信

gcloud コマンド

Cloud Dataproc クラスタにジョブを送信するには、ターミナル ウィンドウまたは Cloud Shell で Cloud SDK の gcloud dataproc jobs submit コマンドをローカルに実行します。
gcloud dataproc jobs submit job-command \
    --cluster cluster-name --region region \
    other dataproc-flags \
    -- job-args
PySpark ジョブ送信の例
  1. Cloud Storage に一般公開されている hello-world.py を一覧表示します。
    gsutil cat gs://dataproc-examples/pyspark/hello-world/hello-world.py
    
    ファイルの一覧表示:
    #!/usr/bin/python
    import pyspark
    sc = pyspark.SparkContext()
    rdd = sc.parallelize(['Hello,', 'world!'])
    words = sorted(rdd.collect())
    print(words)
    
  2. Pyspark ジョブを Cloud Dataproc に送信します。
    gcloud dataproc jobs submit pyspark \
        --cluster cluster-name --region region \
        gs://dataproc-examples/pyspark/hello-world/hello-world.py
    
    ターミナル出力:
    Waiting for job output...
    …
    ['Hello,', 'world!']
    Job finished successfully.
    
Spark ジョブ送信の例
  1. Cloud Dataproc クラスタ上のマスターノードにプリインストールされている SparkPi サンプルを実行します。
    gcloud dataproc jobs submit spark \
        --cluster cluster-name --region region \
        --class org.apache.spark.examples.SparkPi \
        --jars file:///usr/lib/spark/examples/jars/spark-examples.jar \
        -- 1000
    
    ターミナル出力:
    Job [54825071-ae28-4c5b-85a5-58fae6a597d6] submitted.
    Waiting for job output…
    …
    Pi is roughly 3.14177148
    …
    Job finished successfully.
    …
    

REST API

クラスタにジョブを送信するには、Cloud Dataproc jobs.submit API を使用します。次に、pi の近似値を計算する Spark ジョブを送信するための HTTP POST リクエストを示します。
POST /v1/projects/vigilant-sunup-163401/regions/global/jobs:submit/
{
  "projectId": "vigilant-sunup-163401",
  "job": {
    "placement": {
      "clusterName": "cluster-1"
    },
    "reference": {
      "jobId": "d566957c-5bd1-464b-86a8-72a06907e493"
    },
    "sparkJob": {
      "args": [
        "1000"
      ],
      "mainClass": "org.apache.spark.examples.SparkPi",
      "jarFileUris": [
        "file:///usr/lib/spark/examples/jars/spark-examples.jar"
      ]
    }
  }
}

Console

ブラウザの GCP Console で Cloud Dataproc の [ジョブを送信] ページを開きます。
Spark ジョブの例

サンプルの Spark ジョブを送信するには、[ジョブを送信] ページで次のようにフィールドに値を入力します(前のスクリーンショットをご覧ください)。

  1. クラスタリストから [クラスタ] 名を選択します。
  2. [ジョブタイプ] を Spark に設定します。
  3. [メインクラスまたは JAR] を org.apache.spark.examples.SparkPi に設定します。
  4. [引数] を唯一の引数 1000 に設定します。
  5. file:///usr/lib/spark/examples/jars/spark-examples.jarJAR ファイルに追加します。
    1. file:/// は、Hadoop LocalFileSystem スキームを表します。クラスタの作成時に、Cloud Dataproc により /usr/lib/spark/examples/jars/spark-examples.jar がクラスタのマスターノードにインストールされています。
    2. あるいは、いずれかの jar の Cloud Storage パス(gs://your-bucket/your-jarfile.jar)または Hadoop 分散ファイル システムパス(hdfs://path-to-jar.jar)を指定することもできます。

[送信] をクリックしてジョブを開始します。ジョブが開始されると、ジョブのリストにジョブが追加されます。

ジョブ ID をクリックして [ジョブ] ページを開きます。このページで、ジョブのドライバ出力を表示できます(ジョブドライバ出力へのアクセス - Console をご覧ください)。このジョブはブラウザのウィンドウ幅を超える長い出力行を生成するため、pi の計算結果を表示するには [行の折り返し] チェックボックスをオンにして、すべての出力テキストがウィンドウ内に表示されるようにします。

コマンドラインからジョブのドライバ出力を表示するには、次のように gcloud dataproc jobs wait コマンドを使用します(詳細については、ジョブドライバ出力へのアクセス - GCLOUD COMMAND をご覧ください)。--project フラグの値としてプロジェクト ID を、最終引数としてジョブ ID([ジョブ] リストに表示されています)をコピーして貼り付けます。

gcloud dataproc --project=project-id jobs wait job-id

次に、このように送信したサンプルの SparkPi ジョブのドライバ出力のスニペットを示します。

gcloud dataproc --project=spark-pi-demo jobs wait \
  c556b47a-4b46-4a94-9ba2-2dcee31167b2

...

2015-06-25 23:27:23,810 INFO [dag-scheduler-event-loop]
scheduler.DAGScheduler (Logging.scala:logInfo(59)) - Stage 0 (reduce at
SparkPi.scala:35) finished in 21.169 s

2015-06-25 23:27:23,810 INFO [task-result-getter-3] cluster.YarnScheduler
(Logging.scala:logInfo(59)) - Removed TaskSet 0.0, whose tasks have all
completed, from pool

2015-06-25 23:27:23,819 INFO [main] scheduler.DAGScheduler
(Logging.scala:logInfo(59)) - Job 0 finished: reduce at SparkPi.scala:35,
took 21.674931 s

Pi is roughly 3.14189648

...

Job [c556b47a-4b46-4a94-9ba2-2dcee31167b2] finished successfully.

driverOutputUri:
gs://sample-staging-bucket/google-cloud-dataproc-metainfo/cfeaa033-749e-48b9-...
...

クラスタに直接ジョブを送信する

Cloud Dataproc サービスを使用せずにクラスタで直接ジョブを実行する場合は、クラスタのマスターノードに SSH で接続し、マスターノードでジョブを実行します。

マスター インスタンスに SSH で接続する

コマンドラインや GCP Console から SSH を使用して、クラスタの Compute Engine VM インスタンスに接続できます。

gcloud コマンド

クラスタのマスターノード(マスターノードのデフォルト名はクラスタ名に -m 接尾辞を付けたもの)に SSH で接続するには、ローカル ターミナル ウィンドウまたは Cloud Shell から gcloud compute ssh コマンドを実行します。

gcloud compute ssh --project=project-id cluster-name-m

次のスニペットでは、gcloud compute ssh を使用して cluster-1 のマスターノードに SSH で接続しています。

gcloud compute ssh --project=my-project-id cluster-1-m
...
Linux cluster-1-m 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6...
...
user@cluster-1-m:~$

Console

GCP Console を使用してクラスタのマスターノードに SSH で接続します(マスターノードのデフォルト名は、クラスタ名に接尾辞 -m を付けたものになります)。
  1. GCP Console の [VM インスタンス] ページに移動します。
  2. 仮想マシン インスタンスのリストで、接続するマスター インスタンス(-m 接尾辞)の行の [SSH] をクリックします。

マスターノード上のホーム ディレクトリでブラウザ ウィンドウが開きます。

Connected, host fingerprint: ssh-rsa ...
Linux cluster-1-m 3.16.0-0.bpo.4-amd64 ...
...
user@cluster-1-m:~$

マスターノードで Spark ジョブを実行する

VM マスター インスタンスへの SSH 接続を確立した後、クラスタのマスターノード上のターミナル ウィンドウで次のコマンドを実行します。

  1. Spark シェルを開きます。
  2. 一般公開されている Cloud Storage ファイルにある Python で記述された(7 行の)「hello-world」ファイルの行数をカウントする簡単な Spark ジョブを実行します。
  3. shell を終了します。

    user@cluster-name-m:~$ spark-shell
    ...
    scala> sc.textFile("gs://dataproc-examples"
    + "/pyspark/hello-world/hello-world.py").count
    ...
    res0: Long = 7
    scala> :quit
    
このページは役立ちましたか?評価をお願いいたします。

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

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