Установка Hadoop в Ubuntu 13.10

Hadoop – это фреймворк на основе Java, который поддерживает обработку и хранение очень больших массивов данных на кластере из недорогих машин. Hadoop стал первым крупным проектом с открытым кодом в области big data. Проект спонсируется Apache Software Foundation.

Hadoop 2.7 состоит из четырёх основных уровней:

  • Hadoop Common: набор утилит и библиотек для поддержки других модулей Hadoop.
  • HDFS (Hadoop Distributed File System): распределённая файловая система, которая отвечает за хранение данных на диске.
  • YARN (Yet Another Resource Negotiator): «операционная система» для HDFS.
  • MapReduce: оригинальная модель обработки для кластеров Hadoop. Она распределяет работу в кластере, а затем организовывает результаты нод в ответ на запрос и передаёт его. Версия Hadoop 2.х поддерживает много других моделей обработки.

Требования

  • Сервер Ubuntu 13.10 (чтобы настроить сервер, читайте это руководство).
  • Пользователь с доступом к sudo.
  • SSH-доступ к серверу или консоль.

Преимущества Hadoop

Архитектура фреймворка Hadoop позволяет масштабировать аппаратное обеспечение. Вы можете добавлять новые ноды в кластер по мере необходимости, и при этом не беспокоиться об изменениях в форматах данных или поддержке приложений.

Одна из наиболее важных особенностей Hadoop состоит в том, что Hadoop переносит ответственность за отказоустойчивость с аппаратного уровня на уровень приложений. Это даёт возможность заменить дорогие серверы более дешёвыми машинами.

Установка Hadoop

Установить Hadoop довольно просто. Однако этот процесс требует внимания, поскольку включает в себя редактирования большого количества конфигурационных файлов.

1: Установка Java

Для работы Hadoop нужно установить Java.

apt-get update
apt-get install default-jdk

Эти команды обновят индекс пакетов и установят Java. Запросите версию Java, чтобы убедиться, что установка прошла успешно:

java -version

Если установка Java прошла успешно, на экране появится:

root@tutorials:~# java –version
java version “1.7.0_51”
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.13.10.1)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
root@tutorials:~#

2: Создание и установка SSH-сертификатов

Для доступа к нодам Hadoop использует SSH, а при этом запрашивается пароль пользователя. Чтобы обойти это, создайте и установите SSH-сертификаты:

ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Первая команда запросит имя файла, вы можете не заполнять это поле. Чтобы продолжить, нажмите enter. Вторая команда добавит созданный ключ в список ключей, и Hadoop сможет использовать SSH без паролей.

root@tutorials:~# ssh-keygen –t rsa –P ‘ ‘
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
[…]

3: Установка Hadoop

Загрузите пакет Hadoop с одного из зеркал сайта проекта с помощью команды:

wget http://www.motorlogy.com/apache/hadoop/common/current/hadoop-2.3.0.tar.gz

Примечание: В команде используется ссылка для загрузки пакета с зеркала сайта Hadoop. Полный список зеркал можно найти здесь. Чтобы загрузить последнюю стабильную версию, выберите файл hadoop-X.Y.Z.tar.gz из каталога current или current2.

Распакуйте полученный архив:

tar xfz hadoop-2.3.0.tar.gz

Эта команда извлечет файлы в каталог hadoop-2.3.0. Переместите полученные файлы в  каталог /usr/local/hadoop:

mv hadoop-2.3.0 /usr/local/hadoop

Примечание: Имя папки с извлеченными файлами зависит от загруженной версии Hadoop.

4: Конфигурационные файлы

Чтобы завершить установку Hadoop, нужно отредактировать такие файлы:

  • ~/.bashrc
  • /usr/local/hadoop/etc/hadoop/hadoop-env.sh
  • /usr/local/hadoop/etc/hadoop/core-site.xml
  • /usr/local/hadoop/etc/hadoop/yarn-site.xml
  • /usr/local/hadoop/etc/hadoop/mapred-site.xml.template
  • /usr/local/hadoop/etc/hadoop/hdfs-site.xml

Файл ~/.bashrc

Прежде чем приступить к редактированию файла ~/.bashrc в домашнем каталоге, найдите путь установки Java и установите его в переменной JAVA_HOME.

update-alternatives --config java

Команда вернёт:

root@tutorials:~# update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
Nothing to configure.

Полный путь в выводе выглядит так:

/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

В JAVA_HOME нужно указать всё, что идёт перед /jre/bin/java: в данном случае это /usr/lib/jvm/java-7-openjdk-amd64. Запишите этот путь, он нужен в дальнейшей работе.

Откройте ~/.bashrc в текстовом редакторе:

nano ~/.bashrc

Перейдите в конец файла и вставьте следующие параметры:

#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
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
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END

Примечание: Если ваше значение JAVA_HOME отличается, укажите свой путь в операторе export.

Сохраните и закройте файл (Ctrl + X, Y).

Теперь файл .bashrc заканчивается так:

[…] #if [ -f /etc/bash_completion ] && ! shopt –oq posix; then
#     . /etc/bash_completion
#fi
#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
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
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END

Чтобы обновить настройки, введите:

source ~/.bashrc

Теперь .bashrc содержит все необходимые переменные.

Файл /usr/local/hadoop/etc/hadoop/hadoop-env.sh

Откройте /usr/local/hadoop/etc/hadoop/hadoop-env.sh:

nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

Поместите в файл переменную JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

Примечание: Если ваше значение JAVA_HOME отличается, укажите свой путь в операторе export.

Теперь в конце файла находятся такие строки:

# The java implementation to use.
# export JAVA_HOME = ${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

Сохраните и закройте файл. Теперь Hadoop может получить доступ к переменной JAVA_HOME при запуске.

Файл /usr/local/hadoop/etc/hadoop/core-site.xml

Файл /usr/local/hadoop/etc/hadoop/core-site.xml содержит конфигурационные свойства, которые Hadoop использует при запуске. В нём можно изменить настройки запуска Hadoop по умолчанию.

Откройте файл в редакторе:

nano /usr/local/hadoop/etc/hadoop/core-site.xml

Добавьте в теги <configuration></configuration> следующие параметры:

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>

Теперь файл заканчивается такими строками:

[…] <!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

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

Файл /usr/local/hadoop/etc/hadoop/yarn-site.xml

Файл /usr/local/hadoop/etc/hadoop/yarn-site.xml содержит конфигурационные свойства, которые MapReduce использует при запуске. В нём можно изменить настройки запуска MapReduce по умолчанию.

Откройте файл в редакторе:

nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

Добавьте в конец файла следующие строки в тегах <configuration></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>

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

Создание файла /usr/local/hadoop/etc/hadoop/mapred-site.xml

По молчанию каталог /usr/local/hadoop/etc/hadoop/ содержит файл /usr/local/hadoop/etc/hadoop/mapred-site.xml.template. Скопируйте и переименуйте его в mapred-site.xml. Этот файл задаёт фреймворк, который использует MapReduce.

Чтобы скопировать файл:

cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml

Откройте новый файл:

nano /usr/local/hadoop/etc/hadoop/mapred-site.xml

Добавьте в теги <configuration></configuration> следующие параметры:

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

Теперь в конце файла находятся строки:

[…] <!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

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

Файл /usr/local/hadoop/etc/hadoop/hdfs-site.xml

Файл /usr/local/hadoop/etc/hadoop/hdfs-site.xml содержит настройки хостов кластера. Он определяет namenode и datanode кластера.

Прежде чем приступить к редактированию файла, создайте два каталога для хранения namenode и datanode текущей установки Hadoop.

mkdir -p /usr/local/hadoop_store/hdfs/namenode
mkdir -p /usr/local/hadoop_store/hdfs/datanode

Примечание: Вы можете создать эти каталоги в другом месте. В таком случае не забудьте откорректировать данные файла hdfs-site.xml.

Откройте /usr/local/hadoop/etc/hadoop/hdfs-site.xml в редакторе:

nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

Добавьте в файл следующие строки в тегах <configuration></configuration>:

<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>

Теперь файл заканчивается так:

[…] <!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

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

Форматирование файловой системы Hadoop

Выполнив настройку всех конфигурационных файлов Hadoop, отформатируйте файловую систему фреймворка. Для этого введите:

hdfs namenode -format

Примечание: Форматировать файловую систему нужно только однажды, перед запуском Hadoop. Если вы снова введёте эту команду после запуска Hadoop, все данные файловой системы Hadoop будут утеряны.

Запуск Hadoop

Теперь нужно запустить одноузловой кластер Hadoop.

start-dfs.sh

Эта команда дважды задаст вопрос:

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

Введите yes и нажмите enter. После этого запустите:

start-yarn.sh

Чтобы убедиться в том, что запуск Hadoop прошёл успешно, введите команду:

jps

Команда должна вернуть:

root@tutorials:~# jps
1778 Jps
1744 NodeManager
1474 SecondaryNameNode
1146 NameNode
1621 ResourceManager
1272 DataNode

Это значит, что фреймворк Hadoop успешно запущен на вашем сервере.

Если у вас есть приложение, поддерживающее Hadoop, вы можете развернуть его.

Tags: , ,

2 комментария

  • Van Phu says:

    Добрый день,
    я сделал по шагам как вы предложили выше, но в последнем шаге результат только таким образом:
    root@kim-Inspiron-N5110:~# jps
    7559 Jps
    6900 ResourceManager

    Пожалуйста подскажите какие ошибки были?
    Спасибо!

Добавить комментарий для Van Phu Отменить ответ