Автономная установка Hadoop в Ubuntu 18.04

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

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

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

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

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

Требования

Для работы вам нужен сервер Ubuntu 18.04 с пользователем sudo. Подробные инструкции по настройке сервера вы найдете здесь.

Читайте также:

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

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

sudo apt update

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

sudo apt install default-jdk

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

java -version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

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

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

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

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

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

wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

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

Чтобы убедиться, что загруженный файл не был изменён, проверьте его подлинность с помощью контрольной суммы SHA-256. Вернитесь на страницу релизов; в разделе SHA-256 кликните checksum file. Закрузите файл с помощью wget:

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

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

shasum -a 256 hadoop-3.0.3.tar.gz
db96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a  hadoop-3.0.3.tar.gz

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

cat hadoop-3.0.3.tar.gz.mds
...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...

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

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

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

tar -xzvf hadoop-3.0.3.tar.gz

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

sudo mv hadoop-3.0.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-11-openjdk-amd64/

Вы можете скопировать этот вывод и задать полученный путь в 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-11-openjdk-amd64/
. . .

Вариант 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 [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
where CLASSNAME is a user-provided Java class
OPTIONS is none or any of:
--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
buildpaths                       attempt to add class files from build tree
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode
SUBCOMMAND is one of:
. . .

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

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

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

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

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

. . .
File System Counters
FILE: Number of bytes read=1330690
FILE: Number of bytes written=3128841
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=33
Map output materialized bytes=43
Input split bytes=115
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=43
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)=3
Total committed heap usage (bytes)=478150656
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=147
File Output Format Counters
Bytes Written=34

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

. . .
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

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

cat ~/grep_example/*
19  allowed.
1   allowed

Программа MapReduce нашла 19 вхождений слова allowed, после которого идёт точка, и одно вхождение без точки.

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

Заключение

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

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

Tags: , , , ,