Nightbook

Перемещение NameNode

После перемещения NameNode в кластере, ничего не предвещало беды. Все конфигурации я поправил и перезапустил сервисы. К сожалению, я еще не знал что этого не достаточно. Как только выполнили первый запрос к Hive серверу, получили сообщение о том что нет возможности подключится к старому серверу NameNode. Этого не в статье переноса NameNode, потому я решил описать процесс решения проблемы.

Кластер на CDH 4.2

Данные о размещении NameNode хранятся в в базе HiveMetaStore, потому при переносе NameNode на новый сервер, со сменой адреса, необходимо обновлять и саму базу мета-данных. Как оказалось в этом может помочь тулза metatool

Вот только ее расположение мне пришлось искать вручную

find / -type f -name "*metatool*"

Я получил /usr/lib/hive/bin/metatool

Пример использования metatool в описании HDFS HA

Пример

Переместили NameNode с сервер hadoop1.some.org на сервер hadoop2.some.org

Делаем бекап базы данных HiveMetaStore (У меня она в MySQL, потому для меня будет достаточно mysqldump)

Проверяем данные о корневом сервере

metatool -listFSRoot
...
hdfs://hadoop1.some.org:8020/user/hive/warehouse

Изменяем данные о корневом сервере

metatool -updateLocation hdfs://hadoop2.some.org hdfs://hadoop1.some.org -tablePropKey avro.schema.url -serdePropKey schema.url

Проверим изменения

metatool -listFSRoot
...
hdfs://hadoop2.some.org:8020/user/hive/warehouse

где:
tablePropKey - это таблица свойства ключа чье значение может ссылаться на расположение NameNode и следовательно может нуждаться в обновлении. Для обновления адреса в схеме Avro SerDe, указываем avro.schema.url.
serdePropKey - это свойство SerDe ключа чье значение может ссылаться на расположение NameNode и следовательно может нуждаться в обновлении. Для обновления ссылки в схеме Haivvero, указываем schema.url.

P.S. у CDH можно увеличить heap за счет переменной HADOOP_CLIENT_OPTS,

HADOOP_CLIENT_OPTS='-Djava.net.preferIPv4Stack=true -Xmx1073741824 -Xms1073741824' hive --service metatool -updateLocation  hdfs://new hdfs://old