NoRouteToHostException в кластере Hadoop при симуляции сбоя узла? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть кластер hadoop, на котором я должен выполнить некоторое отказоустойчивое тестирование.Во время тестирования, когда узел в кластере Hadoop (HDFS) отключается (для имитации сбоя) и его IP-адрес больше не существует в сети - HDFS на остальных узлах зависает бесконечно с NoRouteToHostExceptions - есть ли способ это исправить?

С другой стороны, если я убиваю процессы hadoop на узле, но оставляю узел работающим (IP-адрес остается действительным в сети), отказоустойчивость работает нормально, зависание отсутствует, и все работает нормально.

Я уже видел объяснение этого исключения здесь: https://wiki.apache.org/hadoop/NoRouteToHost

Если не удается устранить эту проблему - я думал, что кластеры Hadoop должны быть отказоустойчивыми к сбоям узла?

Спасибо

Обновление на основе первого ответа: Да, службы полностью реплицированы на все узлы для обеспечения высокой доступности - это преднамеренная частьдизайн.

(1) Если я на самом деле просто убиваю сервисы Hadoop на узле, но оставляю узел работающим (его IP-адрес остается действительным в сети) - проблема не возникает, а остальные узлы продолжают работать как обычнобез потери данных (так как данные были полностью реплицированы по всем узлам).

(2) Проблема возникает, когда я выключаю узел и его IPбольше не доступен в сети, остальные узлы больше не могут устанавливать TCP-соединение с ним (так как IP больше не существует), и поэтому они просто зависают на неопределенное время с NoRouteToHostExceptions - это проблема, которую я пытаюсь исправить

Опять ирония в том, что если IP-адрес остается действительным, но сервисы Hadoop не работают, проблема с зависанием не возникает - (1) выше - оставшиеся узлы могут по-прежнему устанавливать TCP-соединения с узлом «симуляция сбоя», но Hadoopсервисы не работают.

Это не проблема сети - это контролируемый тест для симуляции отказов узлов в кластере.Когда узел выключен для имитации сбоя - очевидно, что IP-адрес больше не будет действительным в сети.Проблема, с которой мы сталкиваемся, заключается в том, что кластер Hadoop не может справиться с такой ситуацией, когда IP-адрес узла больше не существует.То, что мы ожидали (или, может быть, надеемся, это лучшее слово), когда оставшиеся узлы в кластере Hadoop встречают исключение NoRouteToHostException, они предполагают, что этот узел вышел из строя и просто продолжит работу как обычно без него.Если это невозможно, то ничего страшного, мне просто нужно было точно узнать, что я чего-то не упустил.Еще раз спасибо

1 Ответ

0 голосов
/ 28 декабря 2018

Я думал, что кластеры Hadoop должны быть отказоустойчивыми к сбоям узлов?

Только до точки .

  • Если у вас есть один NameNode, и он отключается, ничто не может быть использовано.Вы не можете читать / писать / обрабатывать данные.
  • Если все узлы данных для реплики блока HDFS не работают, вы не сможете прочитать эти данные.
  • Если ResourceManager не работает, вы не можете запускать задания MapReduce, Spark и т. Д.

Непонятно, на каком компьютере вы остановились, но я бы посоветовал изучить конфигурации HA NameNode и ResourceManager, а также установить коэффициент репликации по умолчанию для узлов данных как минимум 3.

Однако «нет маршрута к хосту» не является проблемой Hadoop и не может быть исправлено на уровне приложения.Как упоминалось в вики,

Это все проблемы конфигурации сети / маршрутизатора.Так как это ваша сеть, только вы могут обнаружить и отследить проблему.

Что в основном означает, что вам необходимо обеспечить ваши таблицы маршрутизации иDNS-серверы или файлы хостов знают, где существует IP-адрес сервера.

...