Установка Hadoop в автономном режиме в Ubuntu 16.04
Java, Ubuntu | Комментировать запись
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: Apache, Hadoop, OpenJDK, Ubuntu 16.04