Перемещение 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