Dataproc クラスタの診断

ログと設定情報は、クラスタやジョブのトラブルシューティングに役立ちます。ただし、ログファイルと構成ファイルは数が多く、調べるために各ファイルを収集するには時間がかかります。この問題に対処するために、Dataproc クラスタは Google Cloud CLI を使用して特別な diagnose コマンドをサポートしています。このコマンドによって、重要なシステム、Spark、Hadoop、Dataproc のログが収集されてアーカイブが作成され、クラスタに接続された Cloud Storage バケットにアーカイブがアップロードされます。

Google Cloud CLI の診断コマンドの使用

Google Cloud CLI の diagnose コマンドを Dataproc クラスタで使用できます(Dataproc と Google Cloud CLI をご覧ください)。

gcloud CLI をインストールして構成したら、次のようにクラスタで gcloud dataproc clusters diagnose コマンドを実行できます。cluster-name はクラスタの名前に、region はクラスタのリージョン(例: --region=us-central1)にそれぞれ置き換えます。

gcloud dataproc clusters diagnose cluster-name \
    --region=region \
    ... other args ...

このコマンドにより、データが格納されたアーカイブ ファイルの Cloud Storage のロケーションが出力されます(診断コマンドの出力に含まれる項目をご覧ください)。アーカイブ ファイルにアクセスしてコピーする方法については、診断で収集されたデータの共有をご覧ください。

マスターノードからの診断スクリプトの実行(省略可)

クラスタがエラー状態であり、Dataproc サーバーからの診断タスクを受け入れられない場合、Google Cloud CLI の診断コマンドが失敗するかタイムアウトする可能性があります。この問題を回避するには、マスターノードに SSH で接続し、診断スクリプトをダウンロードして、マスターノードでローカルにスクリプトを実行します。

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

診断した tarball はローカルの一時ディレクトリに保存されます。必要に応じて、コマンド出力の手順に従うと、Cloud Storage バケットにアップロードして Google サポートと共有できます。

診断で収集されたデータの共有

diagnose コマンドで生成されたアーカイブは、次の 2 つの方法で共有できます。

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

たとえば、次のコマンドは、test-project で診断アーカイブに読み取り権限を追加します。

gsutil -m acl ch -g test-project:R path-to-archive

診断コマンドの出力に含まれる項目

diagnose コマンドでは、クラスタの次の設定ファイル、ログ、出力がアーカイブ ファイルに格納されます。上記のように、アーカイブ ファイルは Dataproc クラスタに関連付けられた Cloud Storage バケットに配置されます。

診断の概要

診断スクリプトは、収集されたデータを自動的に分析し、診断 tarball のルートに 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_AGENT_PID}" jstack/agent_${DATAPROC_AGENT_PID}.jstack
jstack -l "${PRESTO_PID}" jstack/agent_${PRESTO_PID}.jstack
jstack -l "${JOB_DRIVER_PID}" jstack/driver_${JOB_DRIVER_PID}.jstack
jinfo "${DATAPROC_AGENT_PID}" jinfo/agent_${DATAPROC_AGENT_PID}.jstack
jinfo "${PRESTO_PID}" jinfo/agent_${PRESTO_PID}.jstack
jinfo "${JOB_DRIVER_PID}" 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
gcs
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/