Настройка небольшого кластера Hadoop 2.2.0

Настройка небольшого кластера Hadoop 2.2.0
https://habr.com/post/206196/




Предварительные настройки


В качестве операционной системы для нашего кластера используем Ubuntu Server 12.04.3 LTS, но при минимальных изменениях можно будет проделать все шаги и на другой ОС.



Все узлы будут работать на 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




Java
Для работы Hadoop можно использовать либо 6 или 7 версию. В данной статье будем работать с OpenJDK 7 версии:

$ sudo apt-get install openjdk-7-jdk



Хотя можно использовать версию от Oracle.

Очищаем ОС от всех зависимостей OpenJDK sudo apt-get purge openjdk*

Устанавливаем python-software-properties который позволит добавлять новые PPA:

sudo apt-get install python-software-properties

Добавляем PPA с launchpad.net/~webupd8team/+archive/java




sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java7-installer




Создание отдельной учетной записи для запуска Hadoop
Мы будем использовать выделенную учетную запись для запуска Hadoop. Это не обязательно, но рекомендуется. Также предоставим новому пользователю права sudo, чтобы облегчить себе жизнь в будущем.

sudo addgroup hadoop

sudo adduser --ingroup hadoop hduser

sudo usermod -aG sudo hduser



Во время создания нового пользователя, необходимо будет ввести ему пароль.

/etc/hosts

Нам необходимо, чтобы все узлы могли легко обращаться друг к другу. В большом кластере желательно использовать 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




SSH
Для управления узлами кластера hadoop необходим доступ по ssh. Для созданного пользователя hduser предоставить доступ к master.

Для начала необходимо сгенерировать новый ssh ключ:

ssh-keygen -t rsa -P ""

Во время создания ключа будет запрошен пароль. Сейчас можно его не вводить.

Следующим шагом необходимо добавить созданный ключ в список авторизованных:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Проверяем работоспособность, подключившись к себе:

ssh master




Отключение IPv6
Если не отключить 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



Сохраняем и перезагружаем операционную систему.

Если нужен IPv6?

Для того, чтобы отключить ipv6 только в hadoop можно добавить в файл etc/hadoop/hadoop-env.sh:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true




Установка Apache Hadoop
Скачаем необходимые файлы.


Актуальные версии фреймворка располагаются по адресу: www.apache.org/dyn/closer.cgi/hadoop/common




Создадим папку downloads в корневом каталоге и скачаем последнюю версию:

sudo mkdir /downloads

cd downloads/






Распакуем содержимое пакета в /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




Обновление $HOME/.bashrc


Для удобства, добавим в .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



На этом шаге заканчиваются предварительные подготовки.




Настройка Apache Hadoop
Все последующая работа будет вестись из папки /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.

Как?

Необходимо изменить два файла: /etc/hostname и /etc/hosts.



Сгенерируйте на узлах новые SSH-ключи и добавьте их все в список авторизованных на узле master.

На каждом узле кластера изменим значения параметра dfs.replication в etc/hadoop/hdfs-site.xml. Например, выставим везде значение 3.

etc/hadoop/hdfs-site.xml

<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.



Тестовые файлы

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:8088/cluster/apps/



По завершению работы, результат будет располагаться в папке /out в HDFS.

Для того, чтобы скачать его на локальную файловую систему выполним:

bin/hdfs dfs -copyToLocal /out /home/hduser/




Комментарии

Популярные сообщения из этого блога

Репликация MongoDB

Руководство по MongoDB

Запросы в MongoDB