我想知道何时可以安全地从群集中的计算机上删除节点。
我的假设是,如果计算机没有任何容器并且不存储任何有用的数据,则可以安全地删除计算机。
通过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集群中的机器是否参与了工作?
答案 0 :(得分:1)
我不确定您是想知道某个节点是否正在运行任何任务(这就是“参与”的意思),还是想知道是否可以安全地从Spark集群中删除节点>
我将尝试解释后一点。
Spark具有从故障中恢复的能力,这也适用于从群集中删除的任何节点。 删除的节点可以是执行者或应用程序主节点。
yarn.resourcemanager.am.max-attempts
默认情况下,该值为2
就这些节点上的数据而言,您需要了解如何处理任务及其输出。每个节点都有自己的本地存储,以存储在其上运行的任务的输出。任务成功运行后,OutputCommitter
会将输出从本地存储移动到作业的共享存储(HDFS),从中为下一步的工作选择数据。
当任务失败(可能是因为运行此作业的节点失败或被删除)时,该任务将在另一个可用节点上重新运行。
实际上,应用程序主服务器还将在该节点上重新运行成功运行的任务,因为存储在节点本地存储中的输出将不再可用。