Hadoop HDFS в ражеми HA на Centos 7

Hadoop HDFS

В данной статье мы разберем как поднять Hadoop кластер c HDFS в режиме HA.

Будем использовать:

  • CentOS 7
  • 2 сервера будут NameNode’ами в режиме Active и Standby
  • 3 сервера для DataNode с фактором репликации = 3

Основная идея HDFS использовать его без точек монтирования на конечных клиентах.

Режим High Availability появился в Hadoop с версии 2.x для решения проблемы с единой точкой входа в отличие от версии Hadoop 1.х. Это было узкое место. Сейчас реализована концепция Master/Slave для NameNode, которые в свою очередь следят за DataNode.

Архитектура HDFS HA

Отказоустойчивость.

Apache Zookeeper — служба, обеспечивающая регистрацию всех событий и отвечающая за реализацию функционала отказоустойчивости в кластере.

ZookeerFailoverController (ZKFC) является клиентом Zookeeper, который контролирует и управляет статусом NameNode. Каждая из NameNode содержит ZKFC. ZKFC отвечает за мониторинг состояния NameNodes — активный (Active) и пассивный режимы (Standby/Passive).

Службы на активной NameNode:

  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Службы на пассивной NameNode:

  • Zookeeper
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Службы на DataNode:

  • Zookeeper
  • JournalNode
  • DataNode
Сервер IP Hostname
Active NameNode 192.168.0.99 nn1.cluster.com или nn1
Standby NameNode 192.168.0.100 nn2.cluster.com или nn2
DataNode 1 192.168.0.101 dn1.cluster.com или dn1
DataNode 2 192.168.0.102 dn2.cluster.com или dn2
DataNode 3 192.168.0.103 dn3.cluster.com или dn3

Обновляем систему, устанавливаем Java на все ноды:

Отключаем IPv6

Приводим /etc/hosts к единому виду на всех нодах

На каждой ноде генерируем ключи и копируем на каждую ноду

Перезагружаем sshd сервис

Создаем структуру каталогов:

Качаем стабильную версию, распаковываем и создаем симлинк для более простого поиска домашнего каталога Hadoop

Редактируем .bashrc и добавляем переменные окружения для Java, Hadoop и Zookeeper.

Также, рекомендуется добавить эти же переменные окружения в файл

На NameNode1 (nn1) редактируем файл core-site.xml

Добавляем:

Редактируем основной файл конфигурации hdfs-site.xml

Добавляем:

Обратим на важные параметры:

dfs.replication — фактор репликации данных, указываем 3, он не должен быть больше чем кол-во datanode.

Так выглядит информация о файле при репликации 3

ha.zookeeper.quorum — наш zookeeper кворум, где искать ноды zk кластера, крайне необходимо для выбора лидера и всего обнаружение и регистрации состояния нод в кластере.

dfs.namenode.heartbeat.recheck-interval — интервал проверок datanode и помечать их как недоступные.

 

Приступаем к настройке Zookeeper

Создадим файл конфигурации

В основной файл настроек Zookeeper добавим все ноды нашего zk кластера

dataDir=/home/data/zookeeper — указываем каталог для хранения данных zookeeper

server.N — перечисляем все наши сервера, находящиеся в кворуме zookeeper

 

Копируем наши каталоги с настроенным Hadoop (/opt/hadoop-2.9.1) и Zookeeper (/opt/zookeeper-3.4.13) на все ноды, помещаем в аналогичный каталог /opt , создаем аналогичные симлинки и прописываем .bashrc переменные окружения, также не забываем создать каталоги для хранения данных  (/home/data, /home/data/zookeeper, /home/data/nn1).

 

Настройка DataNode серверов

Отличие состоим в том, что нам необходимо создать иопределить дополнительный каталог для хранения данных HDFS.

На datanode серверах редактируем файл hdfs-site.xml и добавляем в него путь к данным:

 

Вернемся к настройке zookeeper, после того как мы скопировали весь каталог на все ноды, с одинаковыми конфигами, теперь нам необходимо создать уникальный файл на каждом сервере — myid. ID должен соответствовать номеру N указанному в файле zoo.cfg

пример для сервера datanode1, он имеет server N=3 в файле zoo.cfg

И так последовательно для каждого сервера в нашем zookeeper кворуме.

 

Создаем systemd скрипты для автоматического запуска сервисов после перезагрузки нод.

Список service конфигов для NameNode серверов (всего 4 шт):

Для DataNode серверов список будет несколько иной, суммарно 3 сервиса:

Мы оставляем конфиги для:

  • journalnode.service
  • zkserver.service

Но дополнительно добавляем datanode.service

После добавления новых сервисов не забываем выполнить команду

 

Приступаем к запуску нашего кластера.

Последовательность запуска крайне важна!

Условно, на нашей будующей активной namenode (сервер nn1), запускаем journalnode сервис

Смотрим вывод команды jps, должена появиться journalnode демон с PID

Форматируем данную ноду nn1

Запускаем демон namenode

Переходим на nn2 (Standby сервер) и копируем метаданные с активной ноды (если спрашивает перезаписать существующие метаданные — отказываемся).

Если команда выполнилась без ошибок, запускаем на nn2 демон namenode

Теперь запускаем Zookeeper на всех нодах нашего кластера, начинаем с Active Namenode (nn1), затем Standby Namenode (nn2), потом Datanode серверах (dn1, dn2, dn3):

После запуска на всех нодах Zookeeper проверяем командой jps наличие сервиса QuorumPeerMain:

Запускаем Datanode демона на Data node серверах:

На Namenode серверах форматируем и запускаем Zookeeper fail сервис:

Вводим команду jps и смотрим наличие демона DFSZkFailoverController

Выполняем на nn2 Standby сервере:

и запускаем демон

Проверяем jps, чтобы на nn2 запустился также DFSZkFailoverController.

Теперь проверим статус наших namenode серверов:

Проверим в браузере как выглядим UI нашего кластера

Небольшой стресс тест, чтобы проверить переключаются или нет active и standby hdfs ноды местами

На nn1 сервера находим ID процесса namenode

и убиваем его

 

 

Дополнительно.

hdfs позволяет активировать опцию — крзина, файлы после удаления некоторое время остаються на файловой системе и затем удаляються, для этого мы добавляли в файл core-site.xml опцию fs.trash.interval, ее значение задается в минутах.

После удаления файлы будут помещаться примерно по такому пути:

 

По-умолчанию web UI доступен  без пароля, включим web авторизацию на dashboard hdfs.

Добавляем

Создаем в том же каталоге файл с содержимым:

Обращаем внимание на значение переменной в данной строке

Тут мы указываем файл, в котором будет находиться реальное имя пользователя и пароль.

Создаем данный файл

Формат файла:

У меня он находиться по данному пути и его содержимое следующее:

После, перезагружаем демона namenode

 

 

Полезные команды:

проверка статуса zk кластера

У нас должен быть на одном из серверов обязательно Mode: active, на всех остальных follower

 

Ссылки:

За основу взята данная статья:

https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/

Про корзину можно почитать тут:

Configuring Trash in HDFS

WEB авториазция отсюда:                      https://streever.atlassian.net/wiki/spaces/HADOOP/blog/2014/03/07/491558/Securing+Hadoop+HDP+Web+UI+Component+s

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *