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, вы можете развернуть его.