Dataproc ジョブのトラブルシューティング

このページでは、Dataproc ジョブのモニタリングとデバッグ、Dataproc ジョブのエラー メッセージの理解に役立つ情報を提供します。

ジョブのモニタリングとデバッグ

Google Cloud CLI、Dataproc REST API、Google Cloud コンソールを使用して Dataproc ジョブを分析しデバッグします。

gcloud CLI

実行中のジョブの状態を調査するには:

gcloud dataproc jobs describe job-id \
    --region=region

ジョブドライバ出力を表示するには、ジョブ出力を表示するをご覧ください。

REST API

jobs.get を呼び出して、ジョブの JobStatus.StateJobStatus.SubstateJobStatus.detailsYarnApplication の各フィールドを調べます。

Console

ジョブドライバ出力を表示するには、ジョブ出力を表示するをご覧ください。

Logging で dataproc エージェント ログを表示するには、ログエクスプローラーのクラスタ セレクタから [Dataproc クラスタ] → [クラスタ名] → [クラスタの UUID] を選択します。

次にログセレクタを使用して google.dataproc.agent ログを選択します。

Logging でジョブログを表示する

ジョブが失敗した場合、Logging のジョブログにアクセスできます。

誰がジョブを送信したかを判別する

ジョブの詳細を検索すると、submittedBy 項目に誰がジョブを送信したかが表示されます。たとえば、このジョブ出力には、user@domain がクラスタにサンプル ジョブを送信したことが示されています。

...
placement:
  clusterName: cluster-name
  clusterUuid: cluster-uuid
reference:
  jobId: job-uuid
  projectId: project
status:
  state: DONE
  stateStartTime: '2018-11-01T00:53:37.599Z'
statusHistory:
- state: PENDING
  stateStartTime: '2018-11-01T00:33:41.387Z'
- state: SETUP_DONE
  stateStartTime: '2018-11-01T00:33:41.765Z'
- details: Agent reported job success
  state: RUNNING
  stateStartTime: '2018-11-01T00:33:42.146Z'
submittedBy: user@domain

エラー メッセージ

  • タスクが取得されませんでした: マスターノードの Dataproc エージェントがコントロール プレーンからタスクを取得できなかったことを示します。これは、多くの場合、メモリ不足(OOM)またはネットワークの問題が原因で発生します。以前はジョブが正常に実行され、その後ネットワーク構成を変更していない場合は、OOM が原因である可能性が高いです。多くの場合、多数の同時実行ジョブ、またはドライバが大量のメモリを消費するジョブ(大規模なデータセットをメモリに読み込むジョブなど)を送信すると、このような状態になります。

  • マスターノードにアクティブなエージェントが見つかりませんでした: マスターノードの Dataproc エージェントがアクティブではなく、新しいジョブを受け入れることができないことを示します。これは、多くの場合、メモリ不足(OOM)やネットワークの問題、またはマスターノード VM が異常な場合に発生します。以前はジョブが正常に実行されており、その後ネットワーク構成を変更していない場合、OOM が原因である可能性が高いです。多くの場合、多数の同時実行ジョブ、またはドライバが大量のメモリを消費するジョブ(大規模なデータセットをメモリに読み込むジョブなど)を送信すると、このような状態になります。この問題は、Dataproc クラスタを再起動(停止してから開始)するか、後でジョブの送信を再試行することで解決できます。注: クラスタを停止すると、実行中のすべてのジョブは失敗します。

  • タスクが見つかりません: ジョブの実行中にクラスタが削除されたことを示します。このエラーを回避するには、ジョブを送信する前に、Google Cloud コンソールの [クラスタ] ページでクラスタのステータスを表示、gcloud dataproc clusters describe コマンドを実行、または clusters.get API リクエストを使用して ClusterStatus.State をチェックして、クラスタのステータスが RUNNING であることを確認します。