Поддерживаемая версия Hadoop: 2.8.3, ссылка на скачивание
Версия JDK: jdk-8u144-linux-x64.rpm, официальный сайт
Операционная система: CentOS 7
Перед использованием скрипта убедитесь, что файлы Hadoop и JDK находятся в этом проекте.
Скопируйте все содержимое текущей директории на узел, где будет установлен мастер-узел Hadoop.
Измените файл hadoop-install.sh в соответствии с вашими требованиями:
hadoop_package_location="./" # Путь к архиву Hadoop
hadoop_package_name="hadoop-2.8.3.tar.gz" # Название архива Hadoop
hadoop_dir_name="hadoop-2.8.3" # Название корневой директории после распаковки
jdk_package_name="jdk-8u144-linux-x64.rpm" # Название пакета JDK
jdk_package_location="./" # Путь к пакету JDK
Измените файл hosts-login.txt в соответствии с примером, используя пробелы для разделения IP-адреса, имени узла, логина пользователя. Узел namenode должен быть указан в первой строке файла.
192.168.0.104 hadoop.master root
Измените переменные окружения Java в файле hadoop-env.sh (по умолчанию после установки rpm: /usr/java/jdk1.8.0_144).
export JAVA_HOME=${JAVA_HOME}
Выполните скрипт hadoop-install.sh.
В процессе выполнения скрипта потребуется ввести подтверждение SSH и пароли для других slave-узлов.
После завершения установки запустите узлы Hadoop следующими командами. По умолчанию переменная hadoop_location
равна /root/hadoop
, а hadoop_dir_name
— значению, указанному на шаге 1.
cd ${hadoop_location}/${hadoop_dir_name}
./bin/hadoop namenode -format # Форматирование файловой системы
./sbin/start-all.sh # Запуск HDFS и YARN
jps # Просмотр запущенных сервисов
Откройте браузер и перейдите по адресу http://namenode:50070, где namenode
— IP-адрес главного узла. Добавьте правила брандмауэра в CentOS 7
firewall-cmd --zone=dmz --add-port=50070/tcp # Разрешение входящего порта 50070
firewall-cmd --reload # Обновление правил брандмауэра
Если правила не работают, можно отключить брандмауэр
systemctl stop firewalld.service # Остановка firewall
Тестирование проводилось на CentOS 7.0, версия Docker — 1.13.1.
Установка Docker см. здесь.
Перед сборкой образа убедитесь, что файл hadoop-2.8.3.tar.gz находится в каталоге hadoop_base.
Убедитесь, что время на сервере правильно установлено!
Все следующие действия выполняются под учетной записью root CentOS.
yum install -y ntpdate
ntpdate asia.pool.ntp.org
Для установки требуется сборка четырёх образов: java, base, slave и master. Поскольку образ master основан на образе base, а образ base основан на CentOS-java, вам следует собирать образы снизу вверх.
Мы предоставили автоматический скрипт для сборки образов. Вы можете собрать образы, выполнив команду chmod +x ./build.sh && ./build.sh
. Конечно, вы также можете собрать образы вручную, чтобы лучше понять процесс.
Время сборки зависит от производительности машины и состояния сети. При успешной сборке будет выдано сообщение Successfully built cbdfb7666b10
, где cbdfb7666b10
— это ID образа, который будет отличаться для каждого образа.
Сборка образа centos-java:
В каталоге centos_java8 выполните команду docker build -t licte/cent-java:latest .
.
Сборка образа hadoop-base:
Если необходимо, перед сборкой этого образа вы можете войти в каталог hadoop конфигурационных файлов и изменить конфигурацию по необходимости. Мы предоставили некоторые значения по умолчанию, поэтому при изменении конфигурации убедитесь, что вы также обновили соответствующие параметры ARG в Dockerfile этого образа. В текущей версии параметры, связанные с конфигурационными файлами, включают: HADOOP_HDFS_NAMENODE, HADOOP_HDFS_DATANODE и HADOOP_TMP_DIR. В каталоге hadoop_base выполните команду docker build -t licte/hadoop-base:latest .
.
Сборка образа hadoop-master:
В каталоге hadoop_master выполните команду docker build -t licte/hadoop-master:latest .
.
Сборка hadoop-slave:
Конфигурация публичных ключей устарела. Обратите внимание: для удобства последующего запуска Hadoop мы включили процесс распространения публичных ключей name-узла в процесс сборки образа. Поэтому перед сборкой образа slave-узла вам следует запустить один name-узел: docker run -p 50070:50070 -p 8088:8088 --name=master --hostname=hadoop.master licte/hadoop-master
. После запуска будет выведен публичный ключ этого узла, который нужно скопировать в файл hadoop_slave/id_rsa.pub. Затем продолжайте следующие шаги. Конечно, вы также можете вручную скопировать содержимое публичного ключа в файл /root/.ssh/authorized_keys
slave-узла после завершения сборки образа, что будет иметь ту же функцию.
В директории hadoop_slave выполните команду docker build -t licte/hadoop-slave:latest .
.
Просмотр образов: Выполните команду docker images
для просмотра списка образов. В списке должны присутствовать следующие записи:
REPOSITORY TAG IMAGE ID CREATED SIZE
licte/hadoop-slave latest 050011e9b4a8 10 секунд назад 1.83 ГБ
licte/hadoop-master latest 4e3bdb2f1aff Около минуты назад 1.91 ГБ
licte/hadoop-base latest 9f4b4f0f8d5f 3 минуты назад 1.83 ГБ
licte/cent-java latest fd370190e217 13 минут назад 783 МБ
hub.c.163.com/public/centos 6.5 997f0ed97903 2 года назад 442 МБ
```### Создание сети Docker Swarm
Поскольку Hadoop выполняет свою функцию в виде кластера, размещение всех контейнеров на одной машине лишает его распределенной функциональности, поэтому межмашинная связь между контейнерами крайне необходима.
В этом примере используется три машины, одна из которых запускает контейнер hadoop-master, называемый HM, а две остальные запускают контейнеры slave, называемые HS1 и HS2 соответственно.
На всех трех машинах установлен Docker, и все они имеют вышеупомянутые образы. Для удобства тестирования можно временно отключить брандмауэр systemctl stop firewalld
.
На машине HM выполните команду docker swarm init
. После выполнения команды будет выдан токен, который следует запомнить для использования другими машинами при подключении к сети.
На машинах HS1 и HS2 выполните команду docker swarm join --token ${TOKEN} ${IP}:2377
, где ${TOKEN} — это значение, полученное на предыдущем шаге, а ${IP} — IP-адрес машины HM. Успешное подключение будет подтверждено сообщением This node joined a swarm as a worker.
.
На машине HM выполните команду docker node ls
, и список узлов должен выглядеть аналогично.
ID ХОСТ СТАТУС ДОСТУПНОСТЬ СТАТУС МЕНЕДЖЕРА
f3j741he8o6tkjv7vvue36t48 * HM Ready Active Leader
ux2mb9d1kpm0ldut65r3820og HS1 Ready Active
Создание пользовательского Docker-сети (на хосте HM):
docker network create -d overlay --attachable hadoop-net
Выполнение docker network ls
должно включать следующее:
NETWORK ID NAME DRIVER SCOPE
c1c53e22e54b bridge bridge local
95dbfa451619 docker_gwbridge bridge local
xllhrzzj8dmq hadoop-net overlay swarm
e2291caef7c6 host host local
k15ytvl4yvj3 ingress overlay swarm
a112ae08ef4f none null local
В зависимости от потребностей запустите один мастер-узел и несколько рабочих узлов.
Запуск namenode:
docker run -itd \
--net=hadoop-net \
--name=master \
-p 50070:50070 \
-p 8088:8088 \
-p 9000:9000 \
-p 8042:8042 \
--hostname=hadoop.master \
licte/hadoop-master
Запуск datanode (в зависимости от потребностей измените имя и hostname):
docker run -itd \
--name slave1 \
--hostname hadoop.slave1 \
-p 50075:50075 \
--net=hadoop-net \
licte/hadoop-slave
После запуска контейнеров войдите в контейнер master (docker exec -it master bash
), выполните ls
, и вы увидите следующие файлы:
anaconda-ks.cfg hdfs hosts ssh.sh hosts.example
Необходимо изменить файл hosts с учетом информации о рабочих узлах, используя hosts.example как образец.
Получение IP-адреса контейнера можно выполнить на хосте командой docker exec -it ${?} ip addr
, где ${?} — это имя или ID контейнера.
После изменения файла hosts выполните ./ssh.sh
для настройки безпарольного входа по SSH. В процессе выполнения скрипта вам могут потребоваться подтверждения (yes/no).После выполнения команды вы сможете войти в директорию ${HADOOP_HOME}$, выполнить
sbin/start-all.shдля запуска Hadoop-кластера. **Первый запуск кластера требует подтверждения публичного ключа, вам потребуется подтвердить (yes/no).** ```После запуска можно получить информацию о кластере, выполнив команду
./hadoop dfsadmin -reportв директории
${HADOOP_HOME}/bin`, или через браузер по адресу http://xx.xx.xx.xx:50070, где xx.xx.xx.xx — IP-адрес машины, на которой развернут контейнер master.
Пример использования MapReduce:
# Загрузить скрипт ${HADOOP_HOME}/bin/hadoop в корневую директорию DFS
${HADOOP_HOME}/bin/hadoop fs -put ${HADOOP_HOME}/bin/hadoop /
# Запустить пример WordCount, предоставленный Hadoop
${HADOOP_HOME}/bin/hadoop jar /usr/local/hadoop-2.8.3/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.8.3-sources.jar org.apache.hadoop.examples.WordCount /hadoop /out
# Просмотреть результат работы WordCount
${HADOOP_HOME}/bin/hdfs dfs -cat /out/part-r-00000
Все действия выполняются в контейнере master, то есть namenode контейнере
После создания нового узла, необходимо отредактировать файл /root/hosts
с учетом имени хоста, IP-адреса и имени пользователя.
Файлы конфигурации Hadoop находятся в директории ${HADOOP_HOME}/etc/hadoop
. Основные конфигурационные файлы включают core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml.
После изменения файлов, выполните команду ./ssh.sh
в директории /root
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )