Как узнать, участвует ли машина в кластере Spark - это работа - PullRequest
1 голос
/ 09 марта 2019

Я хотел знать, когда безопасно удалить узел из машины из кластера.

Я предполагаю, что было бы безопасно удалить машину, если на машине нет контейнеров, ион не хранит никаких полезных данных.

По API на https://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 Driver или какого-то центрального контроллера?Можем ли мы проверить это путем сканирования соединений tcp или udp?

Есть ли другой способ проверить, участвует ли машина в кластере Spark в задании?

1 Ответ

1 голос
/ 10 марта 2019

Я не уверен, хотите ли вы просто узнать, выполняет ли узел какую-либо задачу (это то, что вы подразумеваете под «участием»), или вы хотите знать, безопасно ли удалить узел из кластера Spark

Я попытаюсь объяснить последний пункт.

Spark имеет возможность восстановления после сбоя, что также относится к любому узлу, удаляемому из кластера. Удаленный узел может быть исполнителем или мастером приложения.

  1. Если мастер приложения удален, все задание не будет выполнено. Но если вы используете пряжу в качестве менеджера ресурсов, задание повторяется, и пряжа дает нового мастера приложения. Число повторных попыток настроено в:

yarn.resourcemanager.am.max-попытка

По умолчанию это значение равно 2

  1. Если узел, на котором выполняется задача, удаляется, менеджер ресурсов (который обрабатывается пряжей) перестанет получать пульсы от этого узла. Мастер приложения будет знать, что он должен перепланировать невыполненное задание, поскольку он больше не будет получать статус выполнения от предыдущего узла. Затем он запросит у менеджера ресурсов ресурсы и затем перенесет задание.

Что касается данных об этих узлах, вам необходимо понять, как обрабатываются задачи и их вывод. Каждый узел имеет свое локальное хранилище для хранения результатов выполняемых на них задач. После успешного выполнения задач OutputCommitter переместит вывод из локального хранилища в общее хранилище (HDFS) задания, откуда данные будут выбраны для следующего шага задания. При сбое задачи (возможно, из-за сбоя или удаления узла, выполняющего это задание), задача запускается повторно на другом доступном узле.

Фактически, мастер приложения также повторно запустит успешно выполненные задачи на этом узле, поскольку их выходные данные, хранящиеся в локальном хранилище узла, больше не будут доступны.

...