在运行spark作业时,Dataproc集群中的一个节点总是空闲的。我试过删除和重新创建群集等。但是它总是有一个空闲节点。
原因似乎可以从日志中每隔几秒钟出现的这三行来说明:Trying to fulfill reservation for application application_1476080745886_0001 on node: cluster-4-w-0.c.xxxx.internal:39080
Reserved container application=application_1476080745886_0001 resource=<memory:4608, vCores:1> queue=default: capacity=1.0, absoluteCapacity=1.0, usedResources=<memory:25600, vCores:6>, usedCapacity=0.90909094, absoluteUsedCapacity=0.90909094, numApps=1, numContainers=6 usedCapacity=0.90909094 absoluteUsedCapacity=0.90909094 used=<memory:25600, vCores:6> cluster=<memory:28160, vCores:40>
Skipping scheduling since node cluster-4-w-0.c.xxxx.internal:39080 is reserved by application appattempt_1476080745886_0001_000001
Node cluster-4-w-0.c.xxxx.internal为空闲节点。为什么节点被appattempt_1476080745886_0001_000001保留并且不能作为执行器使用?
由于应用程序尝试,匹配您的Spark应用程序的应用程序ID,我认为应用程序尝试是Spark的YARN AppMaster。默认情况下,Spark appmaster与executor(半个节点)具有相同的(有些过度的)内存占用。因此,默认情况下,应该消耗一半worker。
如果你不改变一些内存配置,我不知道为什么在那个节点上不会有至少一个执行器。在任何情况下,你都可以通过减少spark.yarn.am.cores和spark.yarn.am.memory来缩小AppMaster。
您可以通过ssh进入集群并运行yarn application -list
或导航到ResourceManager的web来更好地调试容器打包。