Установка Hadoop в автономном режиме в Ubuntu 16.04

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.х поддерживает много других моделей обработки.

Кластеры Hadoop довольно сложно настроить, потому проект включает в себя автономный режим, который подходит для изучения Hadoop посредством выполнения простых операций и отладки.

Данное руководство поможет установить Hadoop в автономном режиме и запустить пример программы MapReduce.

Требования

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

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

Для начала обновите индекс пакетов:

sudo apt-get update

Установите OpenJDK (Java Development Kit в Ubuntu 16.04 по умолчанию):

sudo apt-get install default-jdk

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

java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

Если на экране появились данные о версии java, установка OpenJDK прошла успешно.

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

Откройте страницу релизов Hadoop, найдите последний стабильный релиз (на данный момент это 2.7.3) и откройте ссылку на его бинарный файл.

На следующей странице кликните правой кнопкой и скопируйте ссылку на бинарный файл стабильного релиза.

Чтобы загрузить файл на сервер, используйте:

wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

Примечание: Сайт Apache динамически перенаправляет пользователей на наиболее подходящее зеркало, потому ссылка может отличаться.

Чтобы убедиться, что загруженный файл не был изменён, проверьте его подлинность с помощью SHA-256. Вернитесь на страницу релизов; в разделе To perform a quick check using SHA-256 откройте ссылку:

Download the checksum hadoop-X.Y.Z-src.tar.gz.mds from Apache.

На экране появится список каталогов. Откройте каталог загруженной версии.

Найдите файл .mds для загруженного релиза и скопируйте ссылку на hadoop-2.7.3.tar.gz.mds:

dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.3/
[…] hadoop-2.7.3.tar.gz.mds

Чтобы скопировать ссылку на файл, кликните на него правой кнопкой. Затем добавьте ссылку в команду:

wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz.mds

Запустите проверку:

shasum -a 256 hadoop-2.7.3.tar.gz
d489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2  hadoop-2.7.3.tar.gz

Сравните это значение SHA-256 со значением в файле .mds:

cat hadoop-2.7.3.tar.gz.mds
...
hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
...

Вывод запущенной команды для проверки загруженного файла из зеркала должен соответствовать значению в файле hadoop-2.7.3.tar.gz.mds. Разницу в регистрах и пробелы можно проигнорировать.

Убедившись в подлинности файла, используйте команду tar с такими флагами:

  • -x – чтобы извлечь;
  • -z – разархивировать;
  • -v – получить подробный вывод;
  • -f – задать извлечение из файла.

tar -xzvf hadoop-2.7.3.tar.gz

Переместите полученные файлы в /usr/local, специальный каталог для локального программного оборудования.

sudo mv hadoop-2.7.3 /usr/local/hadoop

Примечание: Если вы загрузили другую версию, откорректируйте номер в команде.

Теперь нужно настроить окружение Hadoop.

3: Переменная JAVA_HOME

Для работы Hadoop нужно установить путь к Java. Его можно задать как переменную, а можно прописать в конфигурационном файле Hadoop.

Путь к Java (/usr/bin/java) является символьной ссылкой на /etc/alternatives/java, который в свою очередь является символьной ссылкой на бинарный файл Java по умолчанию. Используйте команду readlink с флагом –f, чтобы рекурсивно отследить все символьные ссылки. Затем используйте sed, чтобы вырезать bin/java из вывода и установить правильное значение в JAVA_HOME.

Чтобы найти путь по умолчанию, введите:

readlink -f /usr/bin/java | sed "s:bin/java::"
/usr/lib/jvm/java-8-openjdk-amd64/jre/

Вы можете скопировать этот вывод и задать полученный путь в JAVA_HOME. Однако если путь Java по умолчанию изменится, этот путь останется без изменений.

Также вы можете использовать команду readlink динамически в файле, тогда Hadoop будет автоматически использовать системную версию Java по умолчанию. Если путь Java по умолчанию изменится, этот путь изменится вместе с ним.

Откройте hadoop-env.sh:

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

Теперь выберите один из вариантов.

Вариант 1: Статическое значение

. . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
. . .

Вариант 2: Динамическое значение

. . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
. . .

Примечание: Значение JAVA_HOME в hadoop-env.sh переопределяет другие значения, установленные в профиле пользователя ил ив среде с помощью /etc/profile.

4: Запуск Hadoop

Чтобы запустить Hadoop, введите:

/usr/local/hadoop/bin/hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME] CLASSNAME            run the class named CLASSNAME
or
where COMMAND is one of:
fs                   run a generic filesystem user client
version              print the version
jar <jar>            run a jar file
note: please use "yarn jar" to launch
YARN applications, not this command.
checknative [-a|-h]  check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath            prints the class path needed to get the
credential           interact with credential providers
Hadoop jar and the required libraries
daemonlog            get/set the log level for each daemon

Если на экране появилась справка для Hadoop, значит, программа успешно запущена в автономном режиме. Чтобы убедиться, что всё работает должным образом, попробуйте запустить программу MapReduce, которая поставляется вместе с Hadoop. Создайте в домашнем каталоге каталог input и скопируйте в него конфигурационные файлы Hadoop.

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

Затем используйте следующую команду, чтобы запустить программу hadoop-mapreduce-examples, архив Java. Затем запустите программу grep из этого архива. Программа grep из MapReduce подсчитывает совпадения слов и регулярных выражений с шаблоном.  Добавьте регулярное выражение, чтобы найти слово principal в повествовательном предложении. Регулярные выражения чувствительны к регистру, поэтому слово не будет найдено, если оно написано с заглавной буквы (например, стоит в начале предложения).

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'

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

. . .
File System Counters
FILE: Number of bytes read=1247674
FILE: Number of bytes written=2324248
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
Map-Reduce Framework
Map input records=2
Map output records=2
Map output bytes=37
Map output materialized bytes=47
Input split bytes=114
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=47
Reduce input records=2
Reduce output records=2
Spilled Records=4
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=61
Total committed heap usage (bytes)=263520256
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=151
File Output Format Counters
Bytes Written=37

Примечание: Если выходной каталог уже существует, программа столкнётся с ошибкой, и вместо кратких данных вы увидите:

. . .
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Результаты хранятся в выходном каталоге. Их можно проверить с помощью команды cat:

cat ~/grep_example/*
6       principal
1       principal.

Задача MapReduce нашла одно совпадение слова principal, после которого идёт точка, и шесть совпадений без точки.

Теперь вы точно знаете, что автономная установка Hadoop работает должным образом.

Заключение

Вы успешно установили Hadoop в автономном режиме. Чтобы написать собственную программу MapReduce, читайте руководство по MapReduce на сайте Apache Hadoop.

Чтобы настроить кластер, обратитесь к этому руководству.

Tags: , , ,

Добавить комментарий