Dataproc クラスタの診断データの収集

「Dataproc クラスタの診断データを表示する」

クラスタやジョブの問題をトラブルシューティングするために、次の診断データを収集できます。

チェックポイント診断データの収集

クラスタの作成時に有効にすると、Dataproc はクラスタの作成クラスタの更新Dataproc ジョブ オペレーション中にチェックポイント診断データを収集します。

チェックポイント データの場所

Dataproc は、Cloud Storage のクラスタの一時バケットの次のフォルダ(checkpoint diagnostic data folder)にチェックポイント診断データを保存します。

gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID 

デフォルトのクラスタ一時バケットの TTL 保持期間は 90 日間です。保持期間が終了すると、データは削除されます。クラスタの作成時に、異なる TTL 期間独自のクラスタ一時バケットを指定できます。

チェックポイント診断データ

  • クラスタノード詳細ログ: Dataproc は次のコマンドを実行して、YARN と HDFS の情報を収集し、Cloud Storage の診断データフォルダの次の場所に書き込みます。

    実行されるコマンド 診断フォルダ内の場所
    yarn node -list -all .../nodes/timestamp/yarn-nodes.log
    hdfs dfsadmin -report -live -decommissioning .../nodes/timestamp/hdfs-nodes.log

  • ジョブの詳細: Dataproc は、Dataproc Jobs API を使用して、ジョブの MapReduce ジョブ情報と Spark ジョブログを保存します。このジョブデータは、送信された MR ジョブと Spark ジョブごとに収集されます。

    • MapReduce job.xml: ジョブ構成設定を含むファイル。.../jobs/JOB_UUID/mapreduce/job.xml に保存されます。
    • Spark イベントログ: デバッグに役立つジョブ実行の詳細。.../jobs/JOB_UUID/spark/application-id に保存されます。
  • Linux システム情報: Dataproc は次のコマンドを実行して、Cloud Storage の診断データフォルダの次の場所にシステム情報を収集して保存します。

    コマンド 診断フォルダ内の場所
    sysctl -a .../system/sysctl.log
    cat /proc/sys/fs/file-nr .../system/fs-file-nr.log
    ping -c 1 .../system/cluster-ping.log
    cp /etc/hosts .../system/hosts_entries.log
    cp /etc/resolv.conf .../system/resolv.conf
  • 構成ファイル: Dataproc は、次の構成ファイルを Cloud Storage のチェックポイント診断データフォルダの次の場所に保存します。

    含まれる項目 診断フォルダ内の場所
    Dataproc のプロパティ .../configs/dataproc/dataproc.properties

    `/etc/google-dataproc/` 内のすべてのファイル
    .../configs/dataproc/

    `/etc/hadoop/conf/` 内のすべてのファイル
    .../configs/hadoop/
    `/etc/hive/conf/` 内のすべてのファイル .../configs/hive/

    `/etc/hive-hcatalog/conf/` 内のすべてのファイル
    .../configs/hive-hcatalog/
    `/etc/knox/conf/` 内のすべてのファイル .../configs/knox/
    `/etc/pig/conf/` 内のすべてのファイル .../configs/pig/

    `/etc/presto/conf/` 内のすべてのファイル
    .../configs/presto/

    `/etc/spark/conf/` 内のすべてのファイル
    .../configs/spark/
    `/etc/tez/conf/` 内のすべてのファイル .../configs/tez/

    `/etc/zookeeper/conf/` 内のすべてのファイル
    .../configs/zookeeper/

チェックポイントの診断データを有効にして共有する

クラスタを作成するときに、クラスタのチェックポイント診断データを有効にして Google Cloud サポートと共有できます。

チェックポイント データの収集を有効にする

Dataproc クラスタを作成するときに dataproc:diagnostic.capture.enabled=true クラスタ プロパティを追加して、クラスタでのチェックポイント診断データの収集を有効にします。

チェックポイント データを共有する

クラスタの一時バケットでバケットレベルの均一なアクセスを有効にすると、収集されたチェックポイント診断データや、MapReduce ジョブ履歴ファイル、集約された YARN ログ、Spark イベントログなどの一時データを含む、一時バケットのすべてのコンテンツがGoogle Cloud サポートと共有されます。

クラスタの一時バケットでオブジェクト レベルのアクセス制御が有効になっている場合は、収集されたチェックポイント診断データ(Cloud Storage のチェックポイント診断データ フォルダ内のデータ)のみが共有されます。

チェックポイント診断データの Google Cloud サポートとの共有は、クラスタの作成時またはクラスタの作成後に有効にできます。

  • クラスタの作成時に共有を有効にする: クラスタを作成するときに、次のプロパティを追加します。

    dataproc:diagnostic.capture.access=GOOGLE_DATAPROC_DIAGNOSE
    
  • クラスタの作成後に共有を有効にする: クラスタの作成後に、次の方法で Google Cloud サポートとチェックポイント データを共有できます。

    • Google Cloud サポートで使用されるサービス アカウントに、チェックポイント データへの読み取りアクセス権を付与します。

      • 一時バケットで均一なバケットレベルのアクセスが有効になっている場合は、IAM ポリシー バインディングを追加します。

        gcloud storage buckets add-iam-policy-binding gs://TEMP_BUCKET \
            --member=serviceAccount:cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com \
            --role=roles/storage.objectViewer
        

      • 一時バケットでオブジェクト レベルのアクセス制御が有効になっている場合は、次のコマンドを実行してチェックポイント診断データを共有します。

        gcloud storage objects update \
            gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID \
            --add-acl-grant=entity=user-cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com,role=READER --recursive
        

スナップショット診断データの収集

次の gcloud dataproc clusters diagnose コマンドを実行して、実行中のクラスタから診断データのスナップショットを収集できます。データは、アーカイブ(tar)ファイルとして Cloud Storage の Dataproc ステージング バケットに書き込まれます。

gcloud dataproc clusters diagnose CLUSTER_NAME \
    --region=REGION \
    --tarball-access=GOOGLE_DATAPROC_DIAGNOSE

注:

  • CLUSTER_NAME: 診断するクラスタの名前。
  • REGION: クラスタのリージョン(us-central1 など)
  • --tarball-access=GOOGLE_DATAPROC_DIAGNOSE このフラグは、Google Cloud サポートに診断 tar ファイルへのアクセス権を提供します。診断 tar ファイルの Cloud Storage パスを Google Cloud サポートに提供します。

  • Additional flags:

    • --start-time--end-time: 両方のフラグを使用して、診断データの収集に使用する期間を %Y-%m-%dT%H:%M:%S.%fZ 形式で指定します。期間を指定すると、その期間の Dataproc の自動スケーリング ログを収集することもできます(デフォルトでは、診断スナップショット データには Dataproc の自動スケーリングログが収集されません)。

    • 次のいずれかのフラグを使用すると、特定のジョブドライバ、Spark イベント、YARN アプリケーション、Sparklens の出力ログを収集できます。

      • --job-ids: ジョブ ID のカンマ区切りリスト
      • --yarn-application-ids: YARN アプリケーション ID のカンマ区切りリスト

        • YARN アプリケーション ログを収集するには、YARN ログの集計を有効にする必要があります(yarn.log-aggregation-enable=true)。
        • MapReduce ジョブの場合、YARN アプリケーション ログのみが収集されます。

省略可: 診断スクリプトを実行する

クラスタがエラー状態にあり、Dataproc サーバーからの診断タスクを受け入れられない場合、gcloud dataproc clusters diagnose コマンドが失敗するかタイムアウトすることがあります。診断コマンドを実行する代わりに、SSH を使用してクラスタに接続し、診断スクリプトをダウンロードして、マスターノードでスクリプトをローカルに実行することもできます。

gcloud compute ssh HOSTNAME
gcloud storage cp gs://dataproc-diagnostic-scripts/diagnostic-script.sh .
sudo bash diagnostic-script.sh

診断アーカイブの tar ファイルはローカル ディレクトリに保存されます。コマンドの出力には、tar ファイルの場所と、tar ファイルを Cloud Storage バケットにアップロードする手順が表示されます。

診断スナップショット データ

クラスタ スナップショット データには、診断の概要と複数のアーカイブ セクションが含まれています。

診断の概要: アーカイブ ファイルには、アーカイブのルートにある summary.txt が含まれています。YARN、HDFS、ディスク、ネットワーキングのステータスなど、クラスタのステータスの概要が表示されます。また、潜在的な問題を警告する警告も表示されます。

アーカイブ セクション: アーカイブ ファイルには、次のアーカイブ ファイルの場所に出力される次の情報が含まれています。

  • デーモンとサービスの情報

    実行されるコマンド アーカイブ内の場所
    yarn node -list -all /system/yarn-nodes.log
    hdfs dfsadmin -report -live -decommissioning /system/hdfs-nodes.log
    hdfs dfs -du -h /system/hdfs-du.log
    service --status-all /system/service.log
    systemctl --type service /system/systemd-services.log
    curl "http://${HOSTNAME}:8088/jmx" /metrics/resource_manager_jmx
    curl "http://${HOSTNAME}:8088/ws/v1/cluster/apps" /metrics/yarn_app_info
    curl "http://${HOSTNAME}:8088/ws/v1/cluster/nodes" /metrics/yarn_node_info
    curl "http://${HOSTNAME}:9870/jmx" /metrics/namenode_jmx

  • JVM の情報

    実行されるコマンド アーカイブ内の場所
    jstack -l "${DATAPROC_AGENTPID}" jstack/agent${DATAPROC_AGENT_PID}.jstack
    jstack -l "${PRESTOPID}" jstack/agent${PRESTO_PID}.jstack
    jstack -l "${JOB_DRIVERPID}" jstack/driver${JOB_DRIVER_PID}.jstack
    jinfo "${DATAPROC_AGENTPID}" jinfo/agent${DATAPROC_AGENT_PID}.jstack
    jinfo "${PRESTOPID}" jinfo/agent${PRESTO_PID}.jstack
    jinfo "${JOB_DRIVERPID}" jinfo/agent${JOB_DRIVER_PID}.jstack

  • Linux システムの情報

    実行されるコマンド アーカイブ内の場所
    df -h /system/df.log
    ps aux /system/ps.log
    free -m /system/free.log
    netstat -anp /system/netstat.log
    sysctl -a /system/sysctl.log
    uptime /system/uptime.log
    cat /proc/sys/fs/file-nr /system/fs-file-nr.log
    ping -c 1 /system/cluster-ping.log

  • ログファイル

    アイテムが含まれています アーカイブ内の場所
    ファイル名に次の接頭辞が付いた /var/log のすべてのログ:
    cloud-sql-proxy
    dataproc
    druid
    gcdp
    google
    hadoop
    hdfs
    hive
    knox
    presto
    spark
    syslog
    yarn
    zookeeper
    ファイルはアーカイブの logs フォルダに配置され、元のファイル名が保持されます。
    クラスタ内の各ノード(マスターとワーカー)の Dataproc ノード起動ログ。 ファイルはアーカイブの node_startup フォルダに配置されます。このフォルダには、クラスタ内のマシンごとに個別のサブフォルダが含まれています。
    journalctl -u google-dataproc-component-gateway からのコンポーネント ゲートウェイのログ /logs/google-dataproc-component-gateway.log

  • 構成ファイル

    含まれる項目 アーカイブ内の場所
    VM メタデータ /conf/dataproc/metadata
    /etc/environment の環境変数 /conf/dataproc/environment
    Dataproc のプロパティ /conf/dataproc/dataproc.properties
    /etc/google-dataproc/ 内のすべてのファイル /conf/dataproc/
    /etc/hadoop/conf/ 内のすべてのファイル /conf/hadoop/
    /etc/hive/conf/ 内のすべてのファイル /conf/hive/
    /etc/hive-hcatalog/conf/ 内のすべてのファイル /conf/hive-hcatalog/
    /etc/knox/conf/ 内のすべてのファイル /conf/knox/
    /etc/pig/conf/ 内のすべてのファイル /conf/pig/
    /etc/presto/conf/ 内のすべてのファイル /conf/presto/
    /etc/spark/conf/ 内のすべてのファイル /conf/spark/
    /etc/tez/conf/ 内のすべてのファイル /conf/tez/
    /etc/zookeeper/conf/ 内のすべてのファイル /conf/zookeeper/

アーカイブ ファイルを共有する

アーカイブ ファイルを Google Cloud サポートまたはユーザーと共有して、クラスタまたはジョブの問題のトラブルシューティングを依頼できます。

アーカイブ ファイルを共有するには:

  • Cloud Storage からアーカイブ ファイルをコピーし、ダウンロードしたアーカイブを共有します。または
  • 他の Google Cloud ユーザーやプロジェクトにファイルへのアクセスを許可するようにアーカイブの権限を変更します

    例: 次のコマンドは、プロジェクト test-project のオーナーにアーカイブの読み取り権限を付与します。

    gcloud storage objects update PATH_TO_ARCHIVE} --add-acl-grant=entity=project-owners-test-project,role=READER