如何知道Spark集群中的机器是否``参与''工作

时间:2019-03-08 22:40:36

标签: apache-spark hadoop autoscaling

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

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

通过https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html上的API,我们可以做到

{
  "uuid":"12345678901234567890",
  "event":"/restapi/v1.0/account/11111111/extension/22222222/telephony/sessions",
  "timestamp":"2019-03-08T22:30:40.059Z",
  "subscriptionId":"11112222-3333-4444-5555-666677778888",
  "ownerId":"33333333",
  "body":{
    "sequence":7,
    "sessionId":"1234567890",
    "telephonySessionId":"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
    "serverId":"10.13.22.20.TAM",
    "eventTime":"2019-03-08T22:30:39.938Z",
    "parties":[
      {
        "accountId":"11111111",
        "extensionId":"22222222",
        "id":"cs12345678901234567890-2",
        "direction":"Inbound",
        "to":{
          "phoneNumber":"+16505550100",
          "name":"Jane Doe",
          "extensionId":"22222222"
        },
        "from":{
          "phoneNumber":"+14155550100",
          "name":"John Smith"
        },
        "recordings":[
          {
            "id":"44444444",
            "active":false
          }
        ],
        "status":{
          "code":"Answered",
          "rcc":false
        },
        "missedCall":false,
        "standAlone":false,
        "muted":false
      }
    ],
    "origin":{
      "type":"Call"
    }
  }
}

获取每个节点的信息,例如

 GET http://<rm http address:port>/ws/v1/cluster/nodes

如果numContainers为0,则假定它不运行容器。但是,它仍然可以在磁盘上存储其他下游任务可以读取的任何数据吗?

如果Spark让我们知道这一点,我不知道。我假设如果一台机器仍然存储一些对正在运行的工作有用的数据,那么该机器是否可以通过Spark Driver或某些中央控制器来保持心跳?我们可以通过扫描tcp或udp连接进行检查吗?

还有其他方法可以检查Spark集群中的机器是否参与了工作?

1 个答案:

答案 0 :(得分:1)

我不确定您是想知道某个节点是否正在运行任何任务(这就是“参与”的意思),还是想知道是否可以安全地从Spark集群中删除节点

我将尝试解释后一点。

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

  1. 如果除去了应用程序母版,则整个作业将失败。但是,如果您要使用yarn作为资源管理器,则将重试该工作,而yarn将提供一个新的应用程序主管。如果在以下位置配置了重试次数:
  

yarn.resourcemanager.am.max-attempts

默认情况下,该值为2

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

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

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

相关问题