Поиск по сайту:

Как установить Hadoop в автономном режиме на Ubuntu 16.04


Введение

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

Hadoop 2.7 состоит из четырех основных слоев:

  • Hadoop Common — это набор утилит и библиотек, поддерживающих другие модули Hadoop.
  • HDFS (расшифровывается как распределенная файловая система Hadoop) отвечает за сохранение данных на диск.
  • YARN, сокращение от Yet Another Resource Negotiator, представляет собой «операционную систему» для HDFS.
  • MapReduce — это исходная модель обработки для кластеров Hadoop. Он распределяет работу внутри кластера или карты, а затем упорядочивает и сводит результаты от узлов к ответу на запрос. Многие другие модели обработки доступны для версии 2.x Hadoop.

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

В этом руководстве мы установим Hadoop в автономном режиме и запустим один из примеров программ MapReduce, которые он включает, для проверки установки.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Сервер Ubuntu 16.04 с пользователем без полномочий root с привилегиями sudo: вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве по начальной настройке сервера с Ubuntu 16.04.

Выполнив это предварительное условие, вы готовы установить Hadoop и его зависимости.

Прежде чем вы начнете, вы также можете взглянуть на Введение в Hadoop.

Шаг 1 — Установка Java

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

  1. sudo apt-get update

Далее мы установим OpenJDK, стандартный набор для разработки Java в Ubuntu 16.04.

  1. sudo apt-get install default-jdk

После завершения установки давайте проверим версию.

  1. java -version
Output
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)

Эти выходные данные подтверждают, что OpenJDK был успешно установлен.

Шаг 2 — Установка Hadoop

Установив Java, мы посетим страницу Apache Hadoop Releases, чтобы найти самую последнюю стабильную версию. Следуйте двоичному файлу для текущей версии:

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

На сервере мы будем использовать wget для его получения:

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

Примечание. Веб-сайт Apache динамически направляет вас к лучшему зеркалу, поэтому ваш URL-адрес может не совпадать с приведенным выше URL-адресом.

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

Введите каталог для загруженной версии:

Наконец, найдите файл .mds для загруженного вами выпуска, затем скопируйте ссылку на соответствующий файл:

Опять же, мы щелкнем правой кнопкой мыши, чтобы скопировать расположение файла, а затем используем wget для передачи файла:

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

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

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

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

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

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

Теперь, когда мы убедились, что файл не был поврежден или изменен, мы будем использовать команду tar с флагом -x для извлечения, -z для распаковки, -v для подробного вывода и -f, чтобы указать, что мы извлекаем данные из файла. Используйте завершение табуляции или замените правильный номер версии в приведенной ниже команде:

  1. tar -xzvf hadoop-2.7.3.tar.gz

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

  1. sudo mv hadoop-2.7.3 /usr/local/hadoop

Имея программное обеспечение, мы готовы настроить его среду.

Шаг 3 — Настройка Java Home в Hadoop

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

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

Чтобы найти путь Java по умолчанию

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

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

Для начала откройте hadoop-env.sh:

  1. 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. Используйте ссылку Readlink для динамической установки значения

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

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

Шаг 4 — Запуск Hadoop

Теперь у нас должна быть возможность запустить Hadoop:

  1. /usr/local/hadoop/bin/hadoop
Output
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, с которой он поставляется. Для этого создайте каталог с именем input в нашем домашнем каталоге и скопируйте в него файлы конфигурации Hadoop, чтобы использовать эти файлы в качестве наших данных.

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

Затем мы можем использовать следующую команду для запуска программы MapReduce hadoop-mapreduce-examples, архива Java с несколькими параметрами. Мы вызовем его программу grep, один из многих примеров, включенных в hadoop-mapreduce-examples, за которым следует входной каталог, input и выходной каталог grep_example. Программа MapReduce grep будет подсчитывать совпадения буквального слова или регулярного выражения. Наконец, мы предоставим регулярное выражение для поиска вхождений слова principal внутри или в конце повествовательного предложения. Выражение чувствительно к регистру, поэтому мы не нашли бы слово, если бы оно было написано с большой буквы в начале предложения:

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

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

Output
. . . 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

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

Output
. . . 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 в выходном каталоге:

  1. cat ~/grep_example/*
Output
6 principal 1 principal.

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

Заключение

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