如何知道spark集群中的一台机器是否参与了一项工作

68bkxrlz  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(449)

我想知道什么时候从集群的机器上删除节点是安全的。
我的假设是,如果机器没有任何容器,并且没有存储任何有用的数据,那么可以安全地删除机器。
通过APIhttps://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/resourcemanagerrest.html,我们能做到

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驱动程序或某个中央控制器来保持心跳?我们可以通过扫描tcp或udp连接来检查这一点吗?
有没有其他方法来检查Spark群中的机器是否参与作业?

vngu2lb8

vngu2lb81#

我不确定您是只想知道某个节点是否正在运行任何任务(这就是您所说的“参与”)还是想知道从spark集群中删除某个节点是否安全
我将试着解释后一点。
spark具有从故障中恢复的能力,这也适用于从集群中移除的任何节点。删除的节点可以是执行器或应用程序主节点。
如果删除应用程序主机,则整个作业将失败。但是,如果您将yarn用作资源管理器,则会重试该作业,并且yarn会给出一个新的应用程序主控形状。重试次数配置在:
yarn.resourcemanager.am.max-尝试次数
默认情况下,该值为2
如果删除了正在运行任务的节点,则资源管理器(由yarn处理)将停止从该节点获取心跳信号。应用程序主机将知道它应该重新安排失败的作业,因为它将不再从上一个节点接收进度状态。然后它将请求资源管理器获取资源,然后重新安排作业。
就这些节点上的数据而言,您需要了解任务及其输出是如何处理的。每个节点都有自己的本地存储来存储在其上运行的任务的输出。任务成功运行后 OutputCommitter 将输出从本地存储移到作业的共享存储(hdfs),从中为作业的下一步拾取数据。当任务失败时(可能是因为运行此作业的节点失败或被删除),该任务将在另一个可用节点上重新运行。
事实上,应用程序主控程序还将重新运行此节点上成功运行的任务,因为它们存储在节点本地存储上的输出将不再可用。

相关问题