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

fwzugrvs  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(594)

我正在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(...)

也许巧合的是,错误似乎大多来自可抢占节点。
我的怀疑是,这些不透明的错误来自于内存不足的节点或执行器,但dataproc似乎没有公开任何与内存相关的粒度度量。
如何确定节点被视为丢失的原因?是否有一种方法可以检查每个节点或执行器的内存使用情况,以验证这些错误是否是由高内存使用率引起的?如果Yarn是杀死容器/确定节点丢失的因素,那么希望有一种方法可以反省为什么?

q43xntqr

q43xntqr1#

因为您使用的是可抢占的虚拟机,它们的寿命很短,保证可以持续24小时。这意味着当gce关闭可抢占虚拟机时,您会看到如下错误:
yarnschedulerbackend$yarnschedulerendpoint:正在请求驱动程序删除executor 177,原因是容器标记为失败:。。。退出状态:-100。诊断:丢失节点上释放的容器

uqxowvwt

uqxowvwt2#

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

gcloud compute ssh ${HOSTNAME}-m --project=${PROJECT}

然后在集群中运行以下命令。
列出群集中的所有节点

yarn node -list

然后使用 ${NodeID} 获取有关节点状态的报告。

yarn node -status ${NodeID}

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

gcloud compute ssh ${HOSTNAME}-m \ 
    --project=${PROJECT} -- \ 
    -L 8088:${HOSTNAME}-m:8088 -N

那就去http://localhost:8088/群集/应用程序。

相关问题