Как отследить событие смены HDFS Active Namenode в NiFi? - PullRequest
0 голосов
/ 14 сентября 2018

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

Тогда у меня поток 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

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

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

0 голосов
/ 15 сентября 2018

Кажется, я решил свою проблему.Но это вовсе не было «проблемой» :) Вот решение: httpfs error Категория операции READ не поддерживается в режиме ожидания .

Мне не нужно было отслеживать событие изменения активного 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 за идею!

0 голосов
/ 14 сентября 2018

Две вещи, которые вы могли бы сделать:

  • Если вы знаете IP-адрес или имя хоста двух именных узлов, вы можете попробовать это: Подключите отношение сбоя PutParquet и подключите его клибо UpdateAttribute и измените значение каталога, если вы используете выражения NiFi для свойства Directory, или другой процессор PutParquet со значением каталога, настроенным для резервного узла имени.
  • Вы можете использовать PutHDFS, но яя не уверен, что PutParquet предлагает лучшую производительность по сравнению с PutHDFS
...