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 是杀死容器/确定节点丢失的那个,那么希望有一种方法可以反省为什么?
打开从您的计算机到集群的安全 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 。
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |