我正在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是杀死容器/确定节点丢失的因素,那么希望有一种方法可以反省为什么?
2条答案
按热度按时间q43xntqr1#
因为您使用的是可抢占的虚拟机,它们的寿命很短,保证可以持续24小时。这意味着当gce关闭可抢占虚拟机时,您会看到如下错误:
yarnschedulerbackend$yarnschedulerendpoint:正在请求驱动程序删除executor 177,原因是容器标记为失败:。。。退出状态:-100。诊断:丢失节点上释放的容器
uqxowvwt2#
打开从计算机到群集的安全shell。您需要为此安装gcloud sdk。
然后在集群中运行以下命令。
列出群集中的所有节点
然后使用
${NodeID}
获取有关节点状态的报告。您还可以通过ssh设置本地端口转发到webui服务器,而不是直接在集群中运行命令。
那就去http://localhost:8088/群集/应用程序。