Используемые термины: Hadoop , Ubuntu .
Рассмотрим установку Hadoop на Linux Ubuntu 20.04, а также настройку кластера. В нашем примере мы будем использовать 3 сервера:
Пошагово, мы выполним работы по предварительной настройке серверов, установке и конфигурирования hadoop, а также созданию кластера.
Преднастройка системы
Установка default-jdk
Установка Hadoop
Загрузка архива
Настройка среды окружения
Проверка работы среды окружения
Создание сертификатов для SSH
Настройка и запуск Hadoop
Редактирование конфигурационных файлов
Тестовый запуск
Настройка автозапуска
Данные действия необходимо выполнить на всех узлах кластера Hadoop.
Как показывает практика, не обновленный список пакетов может привести к ошибкам при установке программного обеспечения.
Для обновления списка пакетов вводим команду:
apt update
Также, при желании, мы можем обновить установленные пакеты (особенно рекомендуется на чистых системах):
apt upgrade
Для корректной работы кластера нам нужно открыть следующие порты:
iptables -I INPUT -p tcp —dport 9870 -j ACCEPT
iptables -I INPUT -p tcp —dport 8020 -j ACCEPT
iptables -I INPUT -p tcp —match multiport —dports 9866,9864,9867 -j ACCEPT
* где порт:
Для сохранения правил используем утилиту netfilter-persistent:
apt install iptables-persistent
netfilter-persistent save
Узлы нашего кластера должны уметь обращаться друг к другу по имени. В продуктивной среде для этого, обычно, используется DNS. Но если такой возможности нет, то необходимо на серверах добавить в файл hosts следующее:
vi /etc/hosts
#127.0.1.1 haddop1
192.168.1.15 haddop1
192.168.1.20 haddop2
192.168.1.25 haddop3
* в данном примере мы указываем соответствия IP-адресов и имен для нашего конкретного примера. Само собой, в вашем случае это будут другие данные.
** обратите внимание на закомментированную строку 127.0.1.1 . Если этого не сделать, то сервер будет запускаться на локальном адресе 127.0.1.1 и вторичные серверы не смогут подключиться к мастеру.
Hadoop разработан на языке программирования Java, поэтому на наших серверах должна быть установлена данная платформа.
Выполняем команду:
apt install default-jdk
Готово. Смотрим версию установленной java:
java -version
Мы должны увидеть что-то на подобие:
openjdk version «11.0.13» 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Установка выполняется вручную — необходимо скачать бинарник с сайта разработчика и разместить на сервере, создать файлы с переменными окружения и настроить автозапуск с помощью systemd. Данные действия выполняем на всех серверах. Также необходимо обеспечить возможность подключения по ssh ко всем серверам кластера.
Переходим на страницу загрузки Hadoop и кликаем по ссылке для скачивания нужной версии программного обеспечения (в нашем примере, самой свежей):
Копируем ссылку на загрузку архива:
Используя ссылку, загружаем на наши серверы архив:
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
Создадим каталог, в который поместим файлы приложения:
mkdir /usr/local/hadoop
Распаковываем содержимое загруженного архива в созданный каталог:
tar -zxf hadoop-*.tar.gz -C /usr/local/hadoop —strip-components 1
Создаем пользователя hadoop:
useradd hadoop -m
И зададим ему пароль:
passwd hadoop
Задаем в качестве владельца каталога hadoop созданного пользователя:
chown -R hadoop:hadoop /usr/local/hadoop
Создаем файл с профилем:
vi /etc/profile.d/hadoop.sh
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=»$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native»
export YARN_HOME=$HADOOP_HOME
export PATH=»$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin»
* в данном примере мы задаем системные переменные, требующиеся для работы hadoop:
Теперь откроем файл:
vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
Находим:
# export JAVA_HOME=
Меняем на:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
* мы прописали актуальный путь до файлов openjdk.
Заходим под пользователем hadoop:
su — hadoop
Попробуем выполнить команду:
$ env | grep -i -E «hadoop|yarn»
Мы должны увидеть следующее:
MAIL=/var/mail/hadoop
USER=hadoop
HADOOP_COMMON_HOME=/usr/local/hadoop
HOME=/home/hadoop
HADOOP_COMMON_LIB_NATIVE_DIR=/usr/local/hadoop/lib/native
LOGNAME=hadoop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
YARN_HOME=/usr/local/hadoop
HADOOP_MAPRED_HOME=/usr/local/hadoop
HADOOP_HDFS_HOME=/usr/local/hadoop
HADOOP_HOME=/usr/local/hadoop
Теперь вводим:
$ hadoop version
Примерно, вывод команды будет таким:
Hadoop 3.3.1
Source code repository https://github.com/apache/hadoop.git -r a3b9c37a397ad4188041dd80621bdeefc46885f2
Compiled by ubuntu on 2021-06-15T05:13Z
Compiled with protoc 3.7.1
From source with checksum 88a4ddb2299aca054416d6b7f81ca55
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.3.1.jar
Остаемся в системе под пользователем hadoop.
Для работы hadoop нужен сертификат, так как внутренние обращения выполняются с помощью запросов ssh. Нам нужно сгенерировать его на одном из серверов и скопировать на остальные.
На мастер-сервере вводим команду, чтобы создать ключи:
$ ssh-keygen
* на все вопросы можно ответить по умолчанию, нажав Enter .
Копируем публичный ключ на локальный компьютер:
$ ssh-copy-id localhost
При первом обращении по SSH будет запрос на принятие сертификата:
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Система запросит ввести пароль для нашего пользователя hadoop. После успешного ввода, мы должны увидеть:
Number of key(s) added: 1
Now try logging into the machine, with: «ssh ‘localhost'»
and check to make sure that only the key(s) you wanted were added.
Теперь скопируем нужные ключи на остальные ноды кластера:
$ scp -r .ssh hadoop@haddop2:~
$ scp -r .ssh hadoop@haddop3:~
* в данном примере мы скопируем каталог .ssh на серверы haddop2 и haddop3 , которые в нашем примере используются в качестве слейвов.
Проверим вход в систему по ssh на все серверы — мы должны подключиться без запроса пароля:
$ ssh localhost
После отключаемся:
$ exit
B также подключаемся другим двум серверам:
$ ssh haddop2
$ exit
$ ssh haddop3
$ exit
Установка и настройка Hadoop завершена. Возвращаемся в консоль первичного пользователя:
$ exit
Отредактируем некоторые конфигурационные файлы (на всех узлах кластера), выполним пробный запуск и настроим сервис для автозапуска.
Открываем файл для общих настроек:
vi /usr/local/hadoop/etc/hadoop/core-site.xml
Приведем его к виду:
…
<!— Put site-specific property overrides in this file. —>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
</configuration>
* где fs.default.name указывает на узел и порт обращения к внутренней файловой системе. В нашем примере на мастер-сервер ( localhost ) порту 9000 . Данная настройка должна быть такой на всех нодах.
Редактируем файл с настройками файловой системы HDFS:
vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml
В итоге должно получиться:
…
<!— Put site-specific property overrides in this file. —>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///hadoop/hdfs/datanode</value>
</property>
</configuration>
* где:
Открываем для редактирования файл для настройки MapReduce:
vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
Задаем следующие параметры:
…
<!— Put site-specific property overrides in this file. —>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
* где mapreduce.framework.name — фреймворк для управления кластером.
Открываем файл для настройки YARN:
vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
Приводим его к виду:
…
<configuration>
<!— Site specific YARN configuration properties —>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
* где yarn.nodemanager.aux-services перечисляет вспомогательные классы обслуживания. По документации рекомендуют использовать mapreduce_shuffle .
Создаем каталоги, которые мы указали для использования HDFS:
mkdir -p /hadoop/hdfs/{namenode,datanode}
Для каталога /hadoop выставим в качестве владельца созданного пользователя hadoop:
chown -R hadoop:hadoop /hadoop
Наши серверы настроены.
Открываем файл с узлами кластера:
vi /usr/local/hadoop/etc/hadoop/workers
И перечислим все slave-узлы:
haddop2
haddop3
Можно запускать кластер.
На мастер-сервере заходим под пользователем hadoop:
su — hadoop
Создаем файловую систему:
$ /usr/local/hadoop/bin/hdfs namenode -format
Для запуска кластера выполняем следующие команды:
$ /usr/local/hadoop/sbin/start-dfs.sh
$ /usr/local/hadoop/sbin/start-yarn.sh
Ждем еще немного (около 10 секунд) для окончательной загрузки java-приложения. После открываем в браузере адрес http://<IP-адрес мастер-сервера>:9870 .
Мы должны увидеть что-то на подобие:
А на вкладке Datanodes мы должны увидеть все наши вторичные ноды.
Кластер работает.
И последнее — настроим запуск hadoop в качестве сервиса. Это делаем на мастер-сервере.
Создаем файл:
vi /etc/systemd/system/hadoop.service
[Unit]
Description=Hdfs service
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
ExecStart=/usr/local/hadoop/sbin/start-all.sh
ExecStop=/usr/local/hadoop/sbin/stop-all.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Перечитываем конфигурацию systemd:
systemctl daemon-reload
Разрешаем автозапуск:
systemctl enable hadoop
Для проверки можно перезагрузить сервер.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…