我在 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 是杀死容器/确定节点丢失的那个,那么希望有一种方法可以反省为什么?
最佳答案
因为您正在使用 Preemptible VMs这是短暂的,并保证持续长达 24 小时。这意味着当 GCE 关闭抢占式虚拟机时,您会看到如下错误:
YarnSchedulerBackend$YarnSchedulerEndpoint: Requesting driver to remove executor 177 for reason Container marked as failed: ... Exit status: -100. Diagnostics: Container released on a lost node
关于apache-spark - 如何检查 Dataproc 上 pyspark 作业的每个执行程序/节点内存使用指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62525537/