我想知道何时从群集中删除计算机中的节点是安全的。
我的假设是,如果机器没有任何容器,则可以安全地移除机器,并且它不存储任何有用的数据。
通过https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html的API,我们可以做到
GET http://<rm http address:port>/ws/v1/cluster/nodes
获取每个节点的信息
<node>
<rack>/default-rack</rack>
<state>RUNNING</state>
<id>host1.domain.com:54158</id>
<nodeHostName>host1.domain.com</nodeHostName>
<nodeHTTPAddress>host1.domain.com:8042</nodeHTTPAddress>
<lastHealthUpdate>1476995346399</lastHealthUpdate>
<version>3.0.0-SNAPSHOT</version>
<healthReport></healthReport>
<numContainers>0</numContainers>
<usedMemoryMB>0</usedMemoryMB>
<availMemoryMB>8192</availMemoryMB>
<usedVirtualCores>0</usedVirtualCores>
<availableVirtualCores>8</availableVirtualCores>
<resourceUtilization>
<nodePhysicalMemoryMB>1027</nodePhysicalMemoryMB>
<nodeVirtualMemoryMB>1027</nodeVirtualMemoryMB>
<nodeCPUUsage>0.006664445623755455</nodeCPUUsage>
<aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
<aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
<containersCPUUsage>0.0</containersCPUUsage>
</resourceUtilization>
</node>
如果numContainers为0,我认为它不运行容器。但是它是否仍然可以存储其他下游任务可以读取的磁盘上的任何数据?
如果Spark让我们知道这一点,我没有得到。我假设如果机器仍然存储一些对正在运行的作业有用的数据,机器可能会使用Spark Driver或某个中央控制器保持心跳?我们可以通过扫描tcp或udp连接来检查吗?
有没有其他方法可以检查Spark集群中的计算机是否参与作业?
我不确定您是否只想知道节点是否正在运行任何任务(这是“参与”的意思),或者您想知道从Spark群集中删除节点是否安全
我将尝试解释后一点。
Spark具有从故障中恢复的能力,这也适用于从群集中删除的任何节点。删除的节点可以是执行程序或应用程序主机。
yarn.resourcemanager.am.max-尝试
默认情况下,此值为2
就这些节点上的数据而言,您需要了解如何处理任务及其输出。每个节点都有自己的本地存储,用于存储在其上运行的任务的输出。成功运行任务后,OutputCommitter
会将输出从本地存储移动到作业的共享存储(HDFS),从中选择数据以用于作业的下一步。当任务失败时(可能是因为运行此作业的节点失败或被删除),该任务将在另一个可用节点上重新运行。
实际上,应用程序主服务器还将重新运行此节点上的成功运行任务,因为存储在节点本地存储上的输出将不再可用。