Запуск кластера Hadoop

Этот мануал посвящен созданию кластера Hadoop из виртуальных серверов. Библиотека программного обеспечения Hadoop – это инфраструктура Apache, которая позволяет обрабатывать большие наборы данных путем распределения по кластерам серверов за счет использования базовых моделей программирования. Hadoop позволяет масштабировать кластер из пары отдельных серверов до тысяч компьютеров. Также Hadoop обеспечивает обнаружение сбоев на уровне приложений, что позволяет достичь высокой доступности.

В этом мануале используются 4 важных модуля:

  • Hadoop Common – это набор общих утилит и библиотек, необходимых для поддержки других модулей Hadoop.
  • Hadoop Distributed File System (HDFS), как говорит Apache, является отказоустойчивой распределенной файловой системой, специально разработанной для обработки больших наборов данных.
  • Hadoop YARN – это фреймворк для планирования заданий и управления ресурсами кластера.
  • Hadoop MapReduce – это основанная на YARN система для параллельной обработки больших наборов данных.

Требования

Четыре сервера Ubuntu 16.04, настроенные по этому мануалу. Подразумевается, что вы используете SSH-ключи с локальной машины. Серверы будут называться так:

  • hadoop-master
  • hadoop-worker-01
  • hadoop-worker-02
  • hadoop-worker-03

1: Настройка серверов

Примечание: Этот раздел следует выполнить на всех серверах кластера.

Установите Java и Hadoop на каждый сервер.

Обновите Ubuntu:

sudo apt-get update && sudo apt-get -y dist-upgrade

Затем установите версию Java без графического интерфейса на каждый сервер.

sudo apt-get -y install openjdk-8-jdk-headless

Чтобы установить Hadoop на каждый сервер, создайте отдельный каталог, например, my-hadoop-install, а затем перейдите в этот каталог.

mkdir my-hadoop-install && cd my-hadoop-install

После этого установите последний бинарный файл из списка доступных версий Hadoop. На данный момент самым последним является релиз Hadoop 3.0.1.

Примечание: Имейте в виду, эти релизы распространяются через зеркальные сайты, а потому рекомендуется сначала проверить их целостность с помощью GPG или SHA-256.

Используйте команду wget и укажите ссылку на выбранный вам пакет, например:

wget http://mirror.cc.columbia.edu/pub/software/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz

После завершения загрузки извлеките содержимое файла с помощью tar, инструмента архивации Ubuntu:

tar xvzf hadoop-3.0.1.tar.gz

2: Настройка среды Hadoop

Примечание: Этот раздел выполняется на каждой ноде кластера.

Установите JAVA_HOME. Откройте следующий файл в текстовом редакторе:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hadoop-env.sh

Найдите следующий его раздел:

...
###
# Generic settings for HADOOP
###
# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
# export JAVA_HOME=
# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

Обновите его таким образом:

...
###
# Generic settings for HADOOP
###
# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

Также необходимо добавить переменные среды для запуска Hadoop и его модулей. Их можно добавить в конец файла (вместо 8host укажите имя своего пользователя).

...
#
# To prevent accidents, shell commands be (superficially) locked
# to only allow certain users to execute certain subcommands.
# It uses the format of (command)_(subcommand)_USER.
#
# For example, to limit who can execute the namenode command,
export HDFS_NAMENODE_USER="8host"
export HDFS_DATANODE_USER="8host"
export HDFS_SECONDARYNAMENODE_USER="8host"
export YARN_RESOURCEMANAGER_USER="8host"
export YARN_NODEMANAGER_USER="8host"

Сохраните и закройте файл. Чтобы применить новые параметры, введите:

source ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hadoop-env.sh

После обновления hadoop-env.sh необходимо создать каталог распределенной файловой системы Hadoop (HDFS) для хранения всех соответствующих файлов HDFS.

sudo mkdir -p /usr/local/hadoop/hdfs/data

Передайте права на файл вашему пользователю. Помните, что если вы используете разные имена пользователей на каждой ноде, вы должны передать права соответствующему пользователю sudo.

sudo chown -R 8host:8host /usr/local/hadoop/hdfs/data

3: Завершение начальной настройки

Примечание: Этот раздел нужно выполнить на каждой ноде кластера.

Теперь обновите файл core_site.xml.

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/core-site.xml

Вы увидите такие строки:

...
<configuration>
</configuration>

Измените файл так, чтобы он выглядел как следующий XML, и включите в него соответствующий IP-адрес сервера вместо server-ip. Если вы используете брандмауэр, вам нужно также открыть порт 9000.

...
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server-ip:9000</value>
</property>
</configuration>

Теперь начальная настройка Hadoop завершена. Можно подключить ноды с помощью SSH-ключей.

4: Настройка SSH для каждой ноды

Чтобы Hadoop работал правильно, нужно настроить беспарольную аутентификацию на основе SSH между главной нодой и рабочими нодами (master и worker – так на языке Hadoop называются первичный и вторичный серверы).

В этом руководстве главной нодой будет hadoop-master, а рабочими нодами будут hadoop-worker (пронумерованные -01, -02 и -03). Сначала нужно создать пару ключей на главной ноде.

Выполните следующую команду на hadoop-master. Нажмите клавишу ввода, чтобы использовать значение по умолчанию для местоположения ключа, затем нажмите Enter  дважды, чтобы не использовать парольную фразу:

ssh-keygen

Затем нужно скопировать открытый ключ главной ноды в файл authorized_keys каждой рабочей ноды.

Скопируйте открытый ключ с главной ноды, запустив cat в файле id_rsa.pub, расположенном в вашей .sshfolder:

cat ~/.ssh/id_rsa.pub

Затем подключитесь к рабочей ноде и откройте файл:

nano ~/.ssh/authorized_keys

Открытый ключ главной ноды, скопированный командой cat ~/.ssh/id_rsa.pub, нужно добавить в файл ~/.ssh/authorized_keys каждой рабочей ноды. Обязательно сохраните файл перед закрытием.

Когда вы закончите обновление рабочих нод, скопируйте открытый ключ главной ноды в свой собственный файл authorized_keys:

nano ~/.ssh/authorized_keys

На hadoop-master нужно добавить в конфигурацию ssh имена всех связанных нод. Откройте файл конфигурации для редактирования:

nano ~/.ssh/config

Файл должен выглядеть следующим образом (укажите соответствующие IP-адреса и имена пользователей).

Host hadoop-master-server-ip
HostName hadoop-example-node-server-ip
User 8host
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-01-server-ip
HostName hadoop-worker-01-server-ip
User 8host
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-02-server-ip
HostName hadoop-worker-02-server-ip
User 8host
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-03-server-ip
HostName hadoop-worker-03-server-ip
User 8host
IdentityFile ~/.ssh/id_rsa

Сохраните и закройте файл.

С hadoop-master создайте SSH-подключение к каждой рабочей ноде:

ssh 8host@hadoop-worker-01-server-ip

Поскольку вы впервые подключаетесь к каждой ноде, вы увидите:

are you sure you want to continue connecting (yes/no)?

Выберите yes. Это нужно сделать всего раз, но это необходимо для установки начального соединения SSH с каждой рабочей нодой. Вернитесь на hasoop-master:

logout

Повторите это на каждой рабочей ноде.

5: Настройка главной ноды

Теперь нужно настроить свойства HDFS на главной ноде.

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml

Раздел configuration нужно отредактировать таким образом:

...
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/hdfs/data</value>
</property>
</configuration>

Сохраните и закройте файл.

Затем определите свойства MapReduce. Откройте файл mapred.site.xml с помощью nano или другого текстового редактора:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/mapred-site.xml

Затем обновите файл так, чтобы он выглядел следующим образом (укажите IP-адрес текущего сервера).

...
<configuration>
<property>
<name>mapreduce.jobtracker.address</name>
<value>hadoop-master-server-ip:54311</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

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

Затем настройте YARN. Обновите раздел configuration следующего XML-файла:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/yarn-site.xml

Обновите конфигурации в файле, укажите IP текущего сервера:

...
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master-server-ip</value>
</property>
</configuration>

Теперь давайте настроим точку ссылки Hadoop. Сначала откройте файл masters:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/masters

В этот файл добавьте IP-адрес текущего сервера:

hadoop-master-server-ip

Затем откройте файл workers:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/workers

В нем нужно указать IP-адреса рабочих нод под строкой localhost:

localhost
hadoop-worker-01-server-ip
hadoop-worker-02-server-ip
hadoop-worker-03-server-ip

6: Настройка рабочих нод

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

На каждой рабочей ноде отредактируйте этот XML-файл:

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml

Раздел configuration нужно заменить следующими строками:

<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/hdfs/data</value>
</property>
</configuration>

Сохраните и закройте файл. Это действие нужно повторить на всех рабочих нодах кластера.

7: Запуск кластера Hadoop

Теперь можно запустить кластер Hadoop. Но прежде нужно отформатировать HDFS на главной ноде. Перейдите на главную ноду, найдите каталог установки Hadoop:

cd ~/my-hadoop-install/hadoop-3.0.1/

Запустите команду:

sudo ./bin/hdfs namenode -format

Успешное форматирование выдаст большое количество выходных данных, состоящих в основном из INFO. Внизу вы увидите фрагмент вывода, подтверждающий, что вы успешно отформатировали каталог хранилища.

...
2018-01-28 17:58:08,323 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/data has been successfully formatted.
2018-01-28 17:58:08,346 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 using no compression
2018-01-28 17:58:08,490 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 of size 389 bytes saved in 0 seconds.
2018-01-28 17:58:08,505 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2018-01-28 17:58:08,519 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-example-node/127.0.1.1
************************************************************/

Теперь запустите кластер Hadoop. Для этого запустите следующие сценарии (обязательно проверьте скрипты перед запуском с помощью команды less):

sudo ./sbin/start-dfs.sh

Затем вы увидите примерно такой вывод:

Starting namenodes on [hadoop-master-server-ip]
Starting datanodes
Starting secondary namenodes [hadoop-master]

Запустите YARN с помощью следующего сценария:

./sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers

Когда вы запустите эти команды, на главной ноде и на каждой рабочей ноде запустятся демоны.

Проверить работу демонов можно с помощью команды jps, которая проверяет процессы Java:

jps

После запуска команды jps вы увидите, что запущены NodeManager, SecondaryNameNode, Jps, NameNode, ResourceManager и DataNode. Появится следующее сообщение:

9810 NodeManager
9252 SecondaryNameNode
10164 Jps
8920 NameNode
9674 ResourceManager
9051 DataNode

Это подтверждает, что вы успешно создали кластер и запустили демонов Hadoop.

В веб-браузере вы можете просмотреть состояние своего кластера:

http://hadoop-master-server-ip:9870

Если у вас включен брандмауэр, обязательно откройте порт 9870.

С полученной страницы вы можете перейти к элементу Datanodes в строке меню, чтобы увидеть активность ноды.

Заключение

В этом мануале вы узнали, как настраивать многоузловой кластер Hadoop из серверов Ubuntu 16.04. Вы также знаете, как контролировать и проверять работоспособность своего кластера с помощью веб-интерфейса DFS.

Чтобы получить информацию о других проектах, которые вы можете использовать в своем новом кластере, ознакомьтесь со списком проектов Apache для Hadoop.

Tags: ,