Как отследить событие смены активного Namenode HDFS в NiFi?

У меня есть кластер HDFS с активными и стандартными именами. Иногда при перезапуске кластера Namenodes меняют свои роли - резервный становится активным, и наоборот.

Затем у меня есть поток NiFi с процессором PutParquet, который записывает некоторые файлы в этот кластер HDFS. Процессор настроен со свойством каталога как «hdfs: // $ {namenode} / some / path», где значение переменной $ {namenode} похоже на «first.namenode.host.com:8020».

Теперь, когда кластер перезапускается и фактический Namenode изменяется на "second.namenode.host.com:8020", конфигурация в NiFi не обновляется, и процессор по-прежнему пытается использовать старый адрес namenode, и поэтому возникает какое-то исключение (я не я помню фактический текст ошибки, но я думаю, что это не имеет значения для моего вопроса).

А теперь вопрос: как я могу отследить это событие в NiFi, чтобы автоматически обновлять конфигурацию процессора PutParqet при изменении конфигурации HDFS?

Версия NiFi - 1.6.0, версия HDFS - 2.6.0-cdh5.8.3


person megazlo    schedule 14.09.2018    source источник


Ответы (3)


Я не подтверждал это, но я подумал, что с HA HDFS (активными и резервными сетевыми узлами) у вас будут свойства высокой доступности, установленные в ваших файлах * -site.xml (вероятно, core-site.xml), и вы будете ссылаться на " имя кластера », которое затем клиент Hadoop преобразует в список NameNodes, к которому он затем попытается подключиться. В этом случае попробуйте использовать имя кластера (см. Файл core-site.xml в кластере), а не жестко заданный адрес NN.

person mattyb    schedule 15.09.2018

Вы могли бы сделать две вещи:

  • Если вы знаете IP-адрес или имя хоста двух узлов имен, вы можете попробовать следующее: подключите отношение сбоя PutParquet и подключите его либо к UpdateAttribute, и измените значение каталога, если вы используете выражения NiFi для свойства Directory или другого процессора PutParquet. со значением каталога, настроенным с помощью резервного узла имени.
  • Вы можете использовать PutHDFS, но я не уверен, что PutParquet предлагает лучшую производительность по сравнению с PutHDFS.
person Sivaprasanna Sethuraman    schedule 14.09.2018
comment
У PutHDFS и PutParquet есть свойство Directory, и я думаю, что оба ожидают hdfs: // $ {namenode} / some / path в качестве значения этого свойства, так в чем же между ними разница? А какой формат вывода у PutHDFS? Как заставить его писать файлы Parquet? Я не вижу для этого никаких свойств ... - person megazlo; 14.09.2018
comment
Вы должны иметь возможность указать каталог как / some / path, и он будет в корне файловой системы в зависимости от того, что настроено в core-site.xml для файловой системы по умолчанию. Я думаю, вам нужен только префикс hdfs: //, если вы пишете в файловую систему, отличную от используемой по умолчанию. - person Bryan Bende; 14.09.2018

Кажется, я решил свою проблему. Но это вовсе не было «проблемой» :) вот решение: https://stackoverflow.com/questions/43340226/httpfs-error-operation-category-read-is-not-supported-in-state-standby.

Мне не приходилось отслеживать событие изменения активного namenode вручную в NiFi, вместо этого мне просто нужно было правильно настроить мой клиент Hadoop с помощью core-site.xml, чтобы заставить его автоматически получать фактический namenode.

Таким образом, решение состоит в том, чтобы просто установить для свойства «fs.defaultFS» в core-site.xml значение свойства «dfs.nameservices» из hdfs-site.xml (в моем случае «fs.defaultFS» в core-site.xml указывает на фактический хост активного namenode - "first.namenode.host.com:8020").

Я говорю «кажется», потому что еще не тестировал это решение. Но, используя этот подход, я могу писать в кластер HDFS, не устанавливая активный адрес hanemode где-либо в NiFi. Я просто установил для него использование некоторого «сервиса имен», а не фактического адреса, поэтому я думаю, что если фактический адрес изменится - вероятно, это не повлияет на NiFi, и клиент Hadoop обрабатывает это событие.

Позже собираюсь протестировать.

Спасибо @mattyb за идею!

person megazlo    schedule 15.09.2018