如何检查 Dataproc 上 pyspark 作业的每个执行程序/节点内存使用指标?

kri*_*ish 6 hadoop-yarn apache-spark google-cloud-platform pyspark google-cloud-dataproc

我在 Google Cloud Dataproc 中运行 PySpark 作业,在一个集群中,其中一半节点可抢占,并且在作业输出(驱动程序输出)中看到几个错误,例如:

...spark.scheduler.TaskSetManager: Lost task 9696.0 in stage 0.0 ... Python worker exited unexpectedly (crashed)
   ...
Caused by java.io.EOFException
   ...

...YarnSchedulerBackend$YarnSchedulerEndpoint: Requesting driver to remove executor 177 for reason Container marked as failed: ... Exit status: -100. Diagnostics: Container released on a *lost* node

...spark.storage.BlockManagerMasterEndpoint: Error try to remove broadcast 3 from block manager BlockManagerId(...)
Run Code Online (Sandbox Code Playgroud)

也许巧合的是,错误似乎主要来自可抢占节点。

我怀疑这些不透明的错误来自于内存不足的节点或执行程序,但 Dataproc 似乎没有公开任何与内存相关的粒度指标。

如何确定节点被视为丢失的原因?有没有一种方法可以检查每个节点或执行程序的内存使用情况,以验证这些错误是否是由高内存使用率引起的?如果 YARN 是杀死容器/确定节点丢失的那个,那么希望有一种方法可以反省为什么?

Olu*_*ule 0

打开从您的计算机到集群的安全 shell。您需要为此安装gcloud sdk 。

gcloud compute ssh ${HOSTNAME}-m --project=${PROJECT}
Run Code Online (Sandbox Code Playgroud)

然后在集群中运行以下命令。

列出集群中所有节点

yarn node -list 
Run Code Online (Sandbox Code Playgroud)

然后用于${NodeID}获取节点状态报告。

yarn node -status ${NodeID}
Run Code Online (Sandbox Code Playgroud)

您还可以通过 SSH 设置本地端口转发到 Yarn WebUI 服务器,而不是直接在集群中运行命令。

gcloud compute ssh ${HOSTNAME}-m \ 
    --project=${PROJECT} -- \ 
    -L 8088:${HOSTNAME}-m:8088 -N
Run Code Online (Sandbox Code Playgroud)

然后在浏览器中访问http://localhost:8088/cluster/apps 。