如何知道Spark集群中的计算机是否参与作业

问题描述 投票:1回答:1

我想知道何时从群集中删除计算机中的节点是安全的。

我的假设是,如果机器没有任何容器,则可以安全地移除机器,并且它不存储任何有用的数据。

通过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集群中的计算机是否参与作业?

apache-spark hadoop autoscaling
1个回答
1
投票

我不确定您是否只想知道节点是否正在运行任何任务(这是“参与”的意思),或者您想知道从Spark群集中删除节点是否安全

我将尝试解释后一点。

Spark具有从故障中恢复的能力,这也适用于从群集中删除的任何节点。删除的节点可以是执行程序或应用程序主机。

  1. 如果删除了应用程序主服务器,则整个作业将失败。但是你是否正在使用纱线作为资源管理者,重新开始工作,纱线提供了一个新的应用程序主人。重试次数配置为:

yarn.resourcemanager.am.max-尝试

默认情况下,此值为2

  1. 如果删除了正在运行任务的节点,则资源管理器(由yarn处理)将停止从该节点获取心跳。应用程序主机将知道它应该重新安排失败的作业,因为它将不再从前一个节点接收进度状态。然后,它将向资源管理器请求资源,然后重新安排作业。

就这些节点上的数据而言,您需要了解如何处理任务及其输出。每个节点都有自己的本地存储,用于存储在其上运行的任务的输出。成功运行任务后,OutputCommitter会将输出从本地存储移动到作业的共享存储(HDFS),从中选择数据以用于作业的下一步。当任务失败时(可能是因为运行此作业的节点失败或被删除),该任务将在另一个可用节点上重新运行。

实际上,应用程序主服务器还将重新运行此节点上的成功运行任务,因为存储在节点本地存储上的输出将不再可用。

© www.soinside.com 2019 - 2024. All rights reserved.