ジョブドライバ出力

gcloud コマンドライン ツール、Google Cloud ConsoleCloud Dataproc REST API を使用すると、Dataproc クラスタのジョブを簡単に送信、モニタリング、制御できます。これらのメカニズムのいずれかを使用してジョブを送信すると、Cloud Dataproc によってジョブからのドライバ(コンソール)出力が自動的に収集され、利用できるようになります。つまり、クラスタへの接続を維持しなくてもドライバ出力を速やかに確認し、その一方でジョブを実行したり、複雑なログファイルに目を通したりできます。

ロギングの構成

デフォルトでは、Cloud Dataproc はドライバ プログラムに対してデフォルトのロギングレベル WARN を使用します。この設定はコマンドラインの使用時に調整できます。コマンドラインでは --driver-log-levels オプションを指定してジョブを送信できます。

特別な root パッケージは、ルート ロガー レベルを制御します。例:

gcloud dataproc jobs submit hadoop ...\
  --driver-log-levels root=FATAL,com.example=INFO

ロギングは、ジョブごとにより粒度の細かいレベルで設定できます。たとえば、Cloud Storage からファイルを読み込むときにデバッグの問題に対処しやすくするには、--driver-log-levels オプションを指定してジョブを送信して、次のように DEBUG ログレベルを指定します。

gcloud dataproc jobs submit hadoop ...\
  --driver-log-levels com.google.cloud.hadoop.gcsio=DEBUG

Spark エグゼキュータのログレベル

/etc/spark/conf/log4j.properties ファイルを編集または置換するクラスタの初期化アクションで、クラスタノードで Spark エグゼキュータのログレベルを設定できます(Apache Log4j 2 もご覧ください)。

/etc/spark/conf/log4j.properties ファイルのサンプル:

# Set everything to be logged to the console.
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Settings to quiet third party logs.
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

# Reduce verbosity for other core classes.
log4j.logger.org.apache.spark=WARN
log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter=WARN
log4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN
log4j.logger.org.spark-project.jetty.server.handler.ContextHandler=WARN

# Spark 2.0 specific output.
log4j.logger.org.spark_project.jetty.server.handler.ContextHandler=WARN.

他のオープンソース コンポーネントには類似した log4j.properties ファイルがあります。初期化アクションでこれらのファイルを編集または置き換えて、ログ出力を制御できます。

ジョブドライバ出力へのアクセス

Cloud Console、gcloud コマンドライン ツール、または Cloud Storage を使用して、Cloud Dataproc ジョブドライバの出力にアクセスできます。

gcloud コマンド

gcloud dataproc jobs submit コマンドでジョブを送信すると、ジョブのドライバ出力がコンソールに表示されます。ジョブ ID を gcloud dataproc jobs wait コマンドに渡すと、ドライバ出力を後の時間、別のパソコン、または新しいウィンドウで「再結合」できます。ジョブ ID は、5c1754a5-34f7-4553-b667-8a1199cb9cab などの GUID です。次に例を示します。

gcloud dataproc jobs wait 5c1754a5-34f7-4553-b667-8a1199cb9cab \
    --project my-project-id --region my-cluster-region
Waiting for job output...
... INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.4.2-hadoop2
... 16:47:45 INFO client.RMProxy: Connecting to ResourceManager at my-test-cluster-m/
...

コンソール

ジョブドライバ出力を表示するには、プロジェクトで Dataproc の [ジョブ] セクションに移動し、ジョブ出力を表示する [ジョブ ID] をクリックします。

ジョブが実行中の場合は、ジョブドライバ出力が新しい内容で定期的にリフレッシュされます。

クラウド ストレージ

ジョブドライバ出力は、Cloud Storage のステージング バケットまたはクラスタの作成時に指定したバケットに格納されます。以下によって返される Job.driverOutputResourceUri フィールドに、Cloud Storage のジョブドライバ出力へのリンクが示されます。

  • jobs.get API リクエスト。
  • gcloud dataproc jobs describe job-id コマンド。
    $ gcloud dataproc jobs describe spark-pi
    ...
    driverOutputResourceUri: gs://dataproc-nnn/jobs/spark-pi/driveroutput
    ...