Dataproc の永続履歴サーバー

概要

Dataproc クラスタが削除されると、診断や他の目的でジョブ履歴ファイルを確認したくなることがよくあります。Dataproc の永続履歴サーバー(PHS)では、アクティブまたは削除された Dataproc クラスタで実行されたジョブのジョブ履歴を表示する UI を備えています。

永続履歴サーバーは、単一ノードの Dataproc クラスタで実行され、Cloud Storage にジョブ履歴ファイルを保存してアクセスします。また、MapReduce、Spark、Pig のジョブをサポートします。この機能は、Dataproc イメージ バージョン 1.4-debian10 以降で使用できます。

Dataproc ジョブクラスタの設定

ジョブを実行し、永続履歴サーバー クラスタがアクセスして表示するジョブログを保存するための Dataproc クラスタを作成する際は、次のフラグとクラスタ プロパティを指定します。

  • --enable-component-gateway: 必須フラグ。コンポーネント ゲートウェイを有効にするには、このフラグを使用する必要があります。
  • dataproc:job.history.to-gcs.enabled: 必須クラスタ プロパティ。Cloud Storage でジョブ履歴のストレージを有効にするには、このプロパティを「true」に設定する必要があります。
  • spark:spark.history.fs.logDirectoryspark:spark.eventLog.dir オプションのクラスタ プロパティ。これらのフラグはそれぞれ、Spark ジョブ履歴とイベントログを書き込む場所を指定します。使用する場合は、両方のフラグを設定して、同じバケット内のディレクトリを指す必要があります。
    プロパティの例:
    spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
    spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
    
  • mapred:mapreduce.jobhistory.intermediate-done-dirmapred:mapreduce.jobhistory.done-dir: オプションのクラスタ プロパティ。これらのフラグはそれぞれ、MapReduce ジョブ履歴ファイルの中間ファイルと最終ファイルを書き込む Cloud Storage のロケーションを指定します。使用する場合は、両方のフラグを設定して、同じバケット内のディレクトリを指す必要があります。中間 mapreduce.jobhistory.intermediate-done-dir ロケーションは一時ストレージです。MapReduce ジョブが完了すると、中間ファイルは mapreduce.jobhistory.done-dir のロケーションに移動します。
    プロパティの例:
    mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done,
    mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
    
  • 次のプロパティは、1.4 以降のイメージのイベントログの Cloud Storage のフラッシュ動作を制御します。注: これらのプロパティのデフォルト構成では、Cloud Storage を使用して Spark イベントログを保存するクラスタの Spark 履歴サーバー UI で実行中のジョブを表示できます。
    spark:spark.history.fs.gs.outputstream.type(default:BASIC)
    spark:spark.history.fs.gs.outputstream.sync.min.interval.ms (default: 5000ms).
    
  1. gcloud dataproc clusters create コマンドを実行してジョブクラスタを作成します。クラスタは、イメージ 1.4-debian10 以降で作成する必要があります。注: 読みやすくするために、以下の --property フラグの値を各行に示します。コマンドを実行するときは、すべてのカンマ区切りの --property フラグ値を 1 行で指定する必要があります
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='dataproc:job.history.to-gcs.enabled=true,
    spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
    spark:spark.eventLog.dir=gs://bucket-name/directory/spark-job-history,
    mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory/mapreduce-job-history/done,
    mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done'
    

次の簡略化されたコマンドを実行すると、Dataproc でジョブ履歴ファイルの Cloud Storage のロケーションを設定できます。

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=1.4-debian10 \
    --enable-component-gateway \
    --properties='dataproc:job.history.to-gcs.enabled=true'

上記の簡略化されたコマンドを使用すると、ジョブ履歴ファイルはデフォルトのディレクトリ(/spark-job-history/mapreduce-job-history/done/mapreduce-job-history/intermediate-done)の Dataproc 一時バケット)に保存されます。一時バケットの Cloud Storage の場所は、gcloud dataproc clusters describe cluster-name --region=region コマンドの出力として一覧表示されます。ジョブ履歴ファイルの Cloud Storage の場所は、クラスタの /etc/spark/conf/spark-defaults.conf ファイルと /etc/hadoop/conf/mapred-site.xml ファイルにも一覧表示されます。

ジョブクラスタのマスターノードに SSH 接続した後の例:

cat /etc/spark/conf/spark-defaults.conf
...
spark.history.fs.logDirectory=gs://temp-bucket/spark-job-history
spark.eventLog.dir=gs://temp-bucket/spark-job-history
cat /etc/hadoop/conf/mapred-site.xml
...
<property>
  <name>mapreduce.jobhistory.done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done</value>
</property>
<property>
  <name>mapreduce.jobhistory.intermediate-done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done_intermediate</value>
</property>

永続的な履歴サーバーの設定

PHS 単一ノードクラスタを作成する際は、次のフラグとクラスタ プロパティを指定します。

  • --enable-component-gateway: 必須フラグコンポーネント ゲートウェイを有効にするには、このフラグを使用する必要があります。
  • spark:spark.history.fs.logDirectory: 永続的な Spark ジョブ履歴を有効にするために必要なクラスタ プロパティ。このプロパティは、PHS がジョブクラスタによって書き込まれた Spark ジョブ履歴ログにアクセスする Cloud Storage バケットとディレクトリを指定します(Dataproc ジョブクラスタの設定をご覧ください)。特定のバケット ディレクトリを指定する代わりに、ワイルドカードとしてアスタリスク(例: gs://bucket-name/*/spark-job-history)を使用すると、PHS サーバーは、指定されたバケット内の複数のディレクトリ(別々のジョブクラスタによって書き込まれたもの)と一致するようになります(ただし、効率性のための考慮事項: パス途中でのワイルドカードの使用をご覧ください)。
  • mapred:mapreduce.jobhistory.read-only.dir-pattern: 必須のクラスタ プロパティ。永続的な MapReduce ジョブ履歴を有効にします。このプロパティは、ジョブクラスタによって書き込まれ PHS がアクセスする MapReduce ジョブ履歴ログの Cloud Storage バケット ディレクトリを指定します(ジョブクラスタの設定をご覧ください)。特定のバケット ディレクトリを指定する代わりに、ワイルドカードとしてアスタリスク(例: gs://bucket-name/*/mapreduce-job-history/done)を使用すると、PHS サーバーは、指定されたバケット内の複数のディレクトリ(別々のジョブクラスタによって書き込まれたもの)と一致するようになります(ただし、効率性のための考慮事項: パス途中でのワイルドカードの使用をご覧ください)。
  1. gcloud dataproc clusters create コマンドを実行して、単一ノードの Dataproc PHS クラスタを作成します。
    gcloud dataproc clusters create cluster-name \
        --single-node \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history,mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done'
    

Cloud Console で PHS 単一ノードクラスタの [クラスタの詳細] ページに移動し、[ウェブ インターフェース] タブをクリックします。[コンポーネント ゲートウェイ] で [MapReduce ジョブ履歴] または [Spark 履歴サーバー] をクリックして、MapReduce と Spark のジョブ履歴の UI を表示します。

Spark 履歴サーバー UI

次のスクリーンショットは、ジョブクラスタの spark.history.fs.logDirectoryspark:spark.eventLog.dir を設定した後にジョブクラスタ-1 とジョブクラスタ-2 で実行される Spark ジョブへのリンクを表示する Spark 履歴サーバーの UI と PHS クラスタの spark.history.fs.logDirectory のロケーションを示しています。

job-cluster-1 gs://example-cloud-storage-bucket/job-cluster-1/spark-job-history
job-cluster-2 gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history
phs-クラスタ gs://example-cloud-storage-bucket/*/spark-job-history

Spark 履歴サーバー UI では、検索ボックスにアプリの名前を入力してジョブを一覧表示できます。アプリの名前は次のいずれかの方法で設定できます(優先度順)。

  1. Spark コンテキストの作成時にアプリケーション コード内に設定する
  2. ジョブの送信時に spark.app.name プロパティによって設定する
  3. Dataproc によってジョブ(projects/project-id/regions/region/jobs/job-id)の完全な REST リソース名に設定する

イベントログ

Spark 履歴サーバー UI では、[Event Log] ボタンをクリックすることで、Spark のイベントログをダウンロードできます。これらのログは、Spark アプリケーションのライフサイクルを調べるのに役立ちます。

Spark ジョブ

Spark アプリケーションは複数のジョブに分割され、さらに複数のステージに分割されます。各ステージには複数のタスクがあり、エグゼキュータ ノード(ワーカー)で実行されます。

  • UI で Spark アプリ ID をクリックして Spark ジョブのページを開きます。このページには、アプリケーション内のジョブのタイムラインと概要が表示されます。

  • ジョブをクリックすると、ジョブの詳細ページが開き、有向非巡回グラフ(DAG)とジョブステージのサマリーが表示されます。

  • ステージをクリックするか、[ステージ] タブを使用してステージを選択し、[ステージの詳細] ページを開きます。

    ステージの詳細には、DAG の可視化、イベント タイムライン、ステージ内のタスクの指標が含まれます。このページを使用して、切り捨てられたタスク、スケジューラの遅延、メモリ不足エラーに関連する問題のトラブルシューティングを行えます。DAG ビジュアライザには、ステージから派生したコード行が表示されます。これにより、コードの問題を追跡できます。

  • Spark アプリケーションのドライバノードとエグゼキュータ ノードに関する情報を表示するには、エグゼキュータのタブをクリックします。

    このページの重要な情報は、各エグゼキュータで実行されたコア数とタスク数です。