Подтвердить что ты не робот

Как правильно удалить узлы в Hadoop?

Я запускаю Hadoop 1.1.2 в кластере с 10 + машинами. Я хотел бы красиво масштабироваться вверх и вниз, как для HDFS, так и для MapReduce. Под "красиво" я подразумеваю, что я требую, чтобы данные не были потеряны (разрешить дефрагментацию HDFS-узлов), а узлы, выполняющие задачу, заканчивают до выключения.

Я заметил, что процесс datanode умирает после завершения декомпозиции, что хорошо. Это то, что я делаю, чтобы удалить node:

  • Добавить node в mapred.exclude
  • Добавить node в hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh stop tasktracker

Чтобы добавить node обратно (при условии, что он был удален, как указано выше), это то, что я делаю.

  • Удалить из mapred.exclude
  • Удалить из hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh start tasktracker
  • $ hadoop-daemon.sh start datanode

Это правильный способ масштабирования вверх и вниз "красиво"? При уменьшении масштаба я замечаю, что длительность работы резко возрастает для некоторых неудачных заданий (поскольку задачи, которые они выполняли на удаленном node, нужно перепланировать).

4b9b3361

Ответ 1

Если вы еще не установили файл исключений dfs, выполните 1-3. Остальное начинается с 4.

  • Завершите работу NameNode.
  • Установите dfs.hosts.exclude, чтобы указать на пустой файл исключения.
  • Перезапустить имяNode.
  • В файле исключения dfs укажите узлы, используя полное имя хоста или IP или IP: порт.
  • Сделайте то же самое в mapred.exclude
  • выполнить bin/hadoop dfsadmin -refreshNodes. Это заставляет NameNode перечитать файл exclude и начать процесс снятия с эксплуатации.
  • выполнить bin/hadoop mradmin -refreshNodes
  • Наблюдайте за веб-интерфейсом NameNode и JobTracker и подтверждаете, что процесс снятия с эксплуатации выполняется. Обновление может занять несколько секунд. Сообщения, такие как "Decommission complete for node XXXX.XXXX.X.XX:XXXXX", появятся в файлах журнала NameNode, когда он завершит вывод из эксплуатации, после чего вы можете удалить узлы из кластера.
  • Когда процесс завершится, пользовательский интерфейс namenode перечислит datanode как выведенный из эксплуатации. На странице Jobtracker будет отображаться обновленное количество активных узлов. Запустите bin/hadoop dfsadmin -report для проверки. Остановите процесс datanode и tasktracker на исключенных node (s).
  • Если вы не планируете повторно вводить машину в кластер, удалите ее из включать и исключать файлы.

Чтобы добавить node в качестве datanode и tasktracker, см. страницу часто задаваемых вопросов Hadoop

РЕДАКТИРОВАТЬ: Когда живое node должно быть удалено из кластера, что происходит с Job?

Задания, выполняемые на node, подлежащие снятию с эксплуатации, будут затронуты, так как задачи задания, запланированного на этом node (ы), будут отмечены как KILLED_UNCLEAN (для отображения карты и сокращения задач) или KILLED (для задания и задачи очистки). Подробнее см. В строке 4633 в JobTracker.java. Задача будет проинформирована о том, что эта задача не выполнена. Большую часть времени Tracker Job отменит выполнение. Однако после многих повторных сбоев он может вместо этого решить, чтобы вся работа была неудачной или успешной. См. Строку 2957 и далее в JobInProgress.java.

Ответ 2

Вы должны знать, что, поскольку Hadoop работает хорошо, он действительно хочет, чтобы данные были доступны в нескольких экземплярах. Удаляя узлы, вы удаляете возможности оптимального доступа к данным, и вы уделяете дополнительное внимание кластеру, чтобы обеспечить доступность.

т.е. путем удаления node, вы делаете это, потому что дополнительная копия всех его данных выполняется где-то в другом месте. Поэтому вы не должны делать это просто для удовольствия, если только вы не используете другую парадигму управления данными, чем в конфигурации по умолчанию (= сохранить 3 копии в кластере).

И для того, чтобы кластер Hadoop работал хорошо, вы захотите фактически сохранить данные в кластере. В противном случае вы не сможете переместить вычисления в данные, потому что данных еще нет. Многое о Hadoop о том, что "умные диски" могут выполнять вычисления перед отправкой данных по сети.

Итак, чтобы сделать это разумным, вам, вероятно, нужно как-то разделить кластер. Попросите один набор узлов сохранить 3 основных копии исходных данных и иметь некоторые "дополнительные" узлы, которые используются только для хранения промежуточных данных и выполнения вычислений на этой части. Никогда не меняйте главные узлы, поэтому им не нужно перераспределять ваши данные. Выключить дополнительные узлы только тогда, когда они пусты? Но это, вероятно, еще не реализовано.

Ответ 3

Во время снятия с эксплуатации временные или промежуточные файлы автоматически очищаются. Сейчас эти файлы отсутствуют, а hasoop не распознает, как это пропало. Таким образом, процесс снятия с эксплуатации продолжает ждать, пока это не будет устранено, даже если фактическое снятие с эксплуатации будет выполнено для всех других файлов.

В графическом интерфейсе Hadoop - если вы заметили, что параметр "Количество реплицированных блоков" не уменьшается за время или почти постоянное, то это вероятная причина.

Итак, перечислите файлы, используя команду

hadoop fsck/-files -blocks -racks

Если вы видите, что эти файлы являются временными и не требуются, удалите эти файлы или папку

Пример: hasoop fs -rmr/var/local/hadoop/hadoop/.staging/* (укажите правильный путь здесь)

Это немедленно решит проблему. Деактивированные узлы перейдут в Dead Nodes за 5 минут.