Dataproc 클러스터 진단

로그 및 구성 정보를 보면 클러스터 또는 작업 문제를 해결하는 데 유용할 수 있습니다. 하지만 로그 및 구성 파일은 매우 많으며 조사를 위해 각 파일을 수집하는 데 많은 시간이 소요될 수 있습니다. 이 문제를 해결하기 위해 Dataproc 클러스터는 Google Cloud CLI를 통해 특수 diagnose 명령어를 지원합니다. 이 명령어는 중요한 시스템, Spark/Hadoop, Dataproc 로그를 수집하고 보관처리한 후 클러스터에 연결된 Cloud Storage 버킷에 보관 파일을 업로드합니다.

Google Cloud CLI diagnose 명령어 사용

Dataproc 클러스터에서 Google Cloud CLI diagnose 명령어를 사용할 수 있습니다(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 위치를 출력합니다(diagnose 명령어 결과에 포함된 항목 참조). 보관 파일의 액세스 및 복사에 대한 자세한 내용은 diagnose로 수집한 데이터 공유를 참조하세요.

마스터 노드에서 진단 스크립트 실행(선택사항)

클러스터가 오류 상태이면 Google Cloud CLI diagnose 명령어가 실패하거나 시간이 초과될 수 있으며 Dataproc 서버의 진단 태스크를 수락할 수 없습니다. 이 문제를 방지하려면 마스터 노드에 SSH로 연결하고 진단 스크립트를 다운로드한 후 마스터 노드에서 스크립트를 로컬로 실행하면 됩니다.

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

진단 tarball은 로컬 임시 디렉터리에 저장됩니다. 원하는 경우 명령어 결과의 안내에 따라 Cloud Storage 버킷에 업로드하고 Google 지원팀과 공유할 수 있습니다.

diagnose로 수집한 데이터 공유

diagnose 명령어로 생성된 자료실을 두 가지 방법으로 공유할 수 있습니다

  1. Cloud Storage에서 파일을 다운로드한 다음, 다운로드된 자료실을 공유합니다.
  2. 다른 Google Cloud Platform 사용자 또는 프로젝트의 파일 액세스를 허용하도록 보관 파일에 대한 권한을 변경합니다.

예를 들어 다음 명령어는 test-project의 진단 자료실에 읽기 권한을 추가합니다.

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

diagnose 명령어 출력에 포함된 항목

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/