- PVSM.RU - https://www.pvsm.ru -
В данной статье будет по шагам разобран процесс создания небольшого кластера Hadoop для опытов.
Несмотря на то, что в интернете на иностранных ресурсах есть полно материала про настройку/развертывание Hadoop, большинство из них либо описывают настройку ранних версий (0.X.X и 1.X.X), либо описывают только настройку в режиме single mode/pseudo distributed mode и лишь частично fully distributed mode. На русском языке материала практически нет вовсе.
Когда мне самому понадобился Hadoop, то я далеко не с первого раза смог все настроить. Материал был неактуален, часто попадались конфиги, которые используют deprecated параметры, поэтому использовать их нежелательно. А даже когда все настроил, то задавался многими вопросами, на которые искал ответы. Также встречались похожие вопросы [1] у других людей.
Всем кому интересно, прошу пожаловать по кат.
В качестве операционной системы для нашего кластера я предлагаю использовать Ubuntu Server 12.04.3 LTS [2], но при минимальных изменениях можно будет проделать все шаги и на другой ОС.
Все узлы будут работать на VirtualBox. Системные настройки для виртуальной машины я выставлял небольшие. Всего 8 GB пространства для жёсткого диска, одно ядро и 512 Мб памяти. Виртуальная машина также оснащена двумя сетевыми адаптерами: один NAT, а другой для внутренней сети.
После того, как была скачена и установлена операционная система, необходимо обновиться и установить ssh и rsync:
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install ssh
sudo apt-get install rsync
Для работы Hadoop можно использовать либо 6 или 7 версию.
В данной статье будем работать с OpenJDK 7 версии:
$ sudo apt-get install openjdk-7-jdk
Хотя можно использовать версию от Oracle.
sudo apt-get install python-software-properties
Добавляем PPA с launchpad.net/ [3]~webupd8team/+archive/java
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
Подробнее: INSTALL ORACLE JAVA 7 IN UBUNTU VIA PPA REPOSITORY [4]
Мы будем использовать выделенную учетную запись для запуска Hadoop. Это не обязательно, но рекомендуется. Также предоставим новому пользователю права sudo, чтобы облегчить себе жизнь в будущем.
sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser
sudo usermod -aG sudo hduser
Во время создания нового пользователя, необходимо будет ввести ему пароль.
Нам необходимо, чтобы все узлы могли легко обращаться друг к другу. В большом кластере желательно использовать dns сервер, но для нашей маленькой конфигурации подойдет файл hosts. В нем мы будем описывать соответствие ip-адреса узла к его имени в сети. Для одного узла ваш файл должен выглядеть примерно так:
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.0.1 master
Для управления узлами кластера hadoop необходим доступ по ssh. Для созданного пользователя hduser предоставить доступ к master.
Для начала необходимо сгенерировать новый ssh ключ:
ssh-keygen -t rsa -P ""
Во время создания ключа будет запрошен пароль. Сейчас можно его не вводить.
Следующим шагом необходимо добавить созданный ключ в список авторизованных:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
Проверяем работоспособность, подключившись к себе:
ssh master
Если не отключить IPv6, то в последствии можно получить много проблем.
Для отключения IPv6 в Ubuntu 12.04 / 12.10 / 13.04 нужно отредактировать файл sysctl.conf:
sudo vim /etc/sysctl.conf
Добавляем следующие параметры:
# IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Сохраняем и перезагружаем операционную систему.
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
Скачаем необходимые файлы.
Актуальные версии фреймворка располагаются по адресу: www.apache.org/dyn/closer.cgi/hadoop/common/ [5]
На момент декабря 2013 года стабильной версией является 2.2.0.
Создадим папку downloads в корневом каталоге и скачаем последнюю версию:
sudo mkdir /downloads
cd downloads/
sudo wget http://apache-mirror.rbc.ru/pub/apache/hadoop/common/stable/hadoop-2.2.0.tar.gz
Распакуем содержимое пакета в /usr/local/, переименуем папку и выдадим пользователю hduser права создателя:
sudo mv /downloads/hadoop-2.2.0.tar.gz /usr/local/
cd /usr/local/
sudo tar xzf hadoop-2.2.0.tar.gz
sudo mv hadoop-2.2.0 hadoop
chown -R hduser:hadoop hadoop
Для удобства, добавим в .bashrc список переменных:
#Hadoop variables
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
На этом шаге заканчиваются предварительные подготовки.
Все последующая работа будет вестись из папки /usr/local/hadoop.
Откроем etc/hadoop/hadoop-env.sh и зададим JAVA_HOME.
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
Опишем, какие у нас будут узлы в кластере в файле etc/hadoop/slaves
master
Этот файл может располагаться только на главном узле. Все новые узлы необходимо описывать здесь.
Основные настройки системы располагаются в etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
Настройки HDFS лежат в etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/datanode</value>
</property>
</configuration>
Здесь параметр dfs.replication задает количество реплик, которые будут хранится на файловой системе. По умолчанию его значение равно
3. Оно не может быть больше, чем количество узлов в кластере.
Параметры dfs.namenode.name.dir и dfs.datanode.data.dir задают пути, где будут физически располагаться данные и информация в HDFS. Необходимо заранее создать папку tmp.
Сообщим нашему кластеру, что мы желаем использовать YARN. Для этого изменим etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Все настройки по работе YARN описываются в файле etc/hadoop/yarn-site.xml:
<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.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
</configuration>
Настройки resourcemanager нужны для того, чтобы все узлы кластера можно было видеть в панели управления.
Отформатируем HDFS:
bin/hdfs namenode –format
Запустим hadoop службы:
sbin/start-dfs.sh
sbin/start-yarn.sh
*В предыдущей версии Hadoop использовался скрипт sbin/start-all.sh, но с версии 2.*.* он объявлен устаревшим.
Необходимо убедиться, что запущены следующие java-процессы:
hduser@master:/usr/local/hadoop$ jps
4868 SecondaryNameNode
5243 NodeManager
5035 ResourceManager
4409 NameNode
4622 DataNode
5517 Jps
Протестировать работу кластера можно при помощи стандартных примеров:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
Теперь у нас есть готовый образ, который послужит основой для создания кластера.
Далее можно создать требуемое количество копий нашего образа.
На копиях необходимо настроить сеть. Необходимо сгенерировать новые MAC-адреса для сетевых интерфейсов и выдать и на них необходимые ip-адреса. В моем примере я работаю с адресами вида 192.168.0.X.
Поправить файл /etc/hosts на всех узлах кластера так, чтобы в нем были прописаны все соответствия.
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.0.1 master
192.168.0.2 slave1
192.168.0.3 slave2
Для удобства, изменить имена новых узлов на slave1 и slave2.
Сгенерируйте на узлах новые SSH-ключи и добавьте их все в список авторизованных на узле master.
На каждом узле кластера изменим значения параметра dfs.replication в etc/hadoop/hdfs-site.xml. Например, выставим везде значение 3.
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
Добавим на узле master новые узлы в файл etc/hadoop/slaves:
master
slave1
slave2
Когда все настройки прописаны, то на главном узле можно запустить наш кластер.
bin/hdfs namenode –format
sbin/start-dfs.sh
sbin/start-yarn.sh
На slave-узлах должны запуститься следующие процессы:
hduser@slave1:/usr/local/hadoop$ jps
1748 Jps
1664 NodeManager
1448 DataNode
Теперь у нас есть свой мини-кластер.
Давайте запустим задачу Word Count.
Для этого нам потребуется загрузить в HDFS несколько текстовых файлов.
Для примера, я взял книги в формате txt с сайта Free ebooks — Project Gutenberg [6].
cd /home/hduser
mkdir books
cd books
wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt
wget http://www.gutenberg.org/cache/epub/5000/pg5000.txt
wget http://www.gutenberg.org/cache/epub/4300/pg4300.txt
wget http://www.gutenberg.org/cache/epub/972/pg972.txt
wget http://www.gutenberg.org/cache/epub/132/pg132.txt
wget http://www.gutenberg.org/cache/epub/1661/pg1661.txt
wget http://www.gutenberg.org/cache/epub/19699/pg19699.txt
Перенесем наши файлы в HDFS:
cd /usr/local/hadoop
bin/hdfs dfs -mkdir /in
bin/hdfs dfs -copyFromLocal /home/hduser/books/* /in
bin/hdfs dfs -ls /in
Запустим Word Count:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /in /out
Отслеживать работу можно через консоль, а можно через веб-интерфейс ResourceManager'а по адресу master [7]:8088/cluster/apps/
По завершению работы, результат будет располагаться в папке /out в HDFS.
Для того, чтобы скачать его на локальную файловую систему выполним:
bin/hdfs dfs -copyToLocal /out /home/hduser/
Если у вас возникнут вопросы, то задавайте их в комментариях.
Автор: martsen
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vy-sokaya-proizvoditel-nost/50838
Ссылки в тексте:
[1] вопросы: http://toster.ru/q/57046
[2] Ubuntu Server 12.04.3 LTS: http://www.ubuntu.com/download/server
[3] launchpad.net/: https://launchpad.net/
[4] INSTALL ORACLE JAVA 7 IN UBUNTU VIA PPA REPOSITORY: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
[5] www.apache.org/dyn/closer.cgi/hadoop/common/: http://www.apache.org/dyn/closer.cgi/hadoop/common/
[6] Free ebooks — Project Gutenberg: http://www.gutenberg.org/
[7] master: http://master
[8] Источник: http://habrahabr.ru/post/206196/
Нажмите здесь для печати.