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

Вступление

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

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

  • Hadoop Common - это набор утилит и библиотек, поддерживающих другие модули Hadoop.

  • HDFS, что означает распределенная файловая система Hadoop, отвечает за сохранение данных на диске.

  • YARN, сокращение от еще одного согласователя ресурсов, - это «операционная система» для HDFS.

  • MapReduce - это исходная модель обработки для кластеров Hadoop. Он распределяет работу внутри кластера или карты, затем организует и сводит результаты узлов в ответ на запрос. Многие другие модели обработки доступны для версии 2.x Hadoop.

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

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

Предпосылки

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

  • An Ubuntu 16.04 server with a non-root user with sudo privileges: Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководствеInitial Server Setup with Ubuntu 16.04.

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

Перед тем, как начать, вы также можете взглянуть наAn Introduction to Big Data Concepts and Terminology илиAn Introduction to Hadoop

[[step-1 -—- install-java]] == Шаг 1. Установка Java

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

sudo apt-get update

Далее мы установим OpenJDK, стандартный Java Development Kit на Ubuntu 16.04.

sudo apt-get install default-jdk

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

java -version
Outputopenjdk 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 был успешно установлен.

[[step-2 -—- install-hadoop]] == Шаг 2. Установка Hadoop

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

Screenshot of the Hadoop Releases page highlighting the link the mirrors page

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

Screenshot of the Hadoop releases page highlighting the link to the latest stable binary

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

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

[.note] #Note: Веб-сайт Apache динамически перенаправит вас на лучшее зеркало, поэтому ваш URL-адрес может не совпадать с URL-адресом выше.
#

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

Screenshot highlighting the .mds file

Введите каталог для загруженной вами версии:
Screenshot highlighting the .mds file

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

Screenshot highlighting the .mds file

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

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
Outputd489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2  hadoop-2.7.3.tar.gz

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

cat hadoop-2.7.3.tar.gz.mds

~/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, чтобы указать, что мы извлекаем из файла. Используйте завершение табуляции или замените правильный номер версии в приведенной ниже команде:

tar -xzvf hadoop-2.7.3.tar.gz

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

sudo mv hadoop-2.7.3 /usr/local/hadoop

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

[[step-3 -—- configuring-hadoop-39-s-java-home]] == Шаг 3. Настройка домашней страницы Java в Hadoop

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

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

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

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:

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

Затем выберите один из следующих вариантов:

Вариант 1: установить статическое значение

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

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

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

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

[.note] #Note: Что касается Hadoop, значениеJAVA_HOME вhadoop-env.sh переопределяет любые значения, которые установлены в среде/etc/profile или в профиле пользователя.
#

[[step-4 -—- running-hadoop]] == Шаг 4. Запуск Hadoop

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

/usr/local/hadoop/bin/hadoop
OutputUsage: 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             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   copy file or directories recursively
  archive -archiveName NAME -p  *  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, чтобы использовать эти файлы в качестве наших данных.

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

Затем мы можем использовать следующую команду для запуска программы MapReducehadoop-mapreduce-examples, архива Java с несколькими параметрами. Мы вызовем его программуgrep, один из многих примеров, включенных вhadoop-mapreduce-examples, за которой следует каталог ввода,input и каталог выводаgrep_example. Программа MapReduce grep будет считать совпадения буквенного слова или регулярного выражения. Наконец, мы предоставим регулярное выражение для поиска вхождений слова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[.]*'

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

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

[.Примечание]##

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

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

cat ~/grep_example/*
Output6       principal
1       principal.

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

Заключение

В этом руководстве мы установили Hadoop в автономном режиме и проверили его, запустив пример программы, которую он предоставил. Чтобы узнать, как писать свои собственные программы MapReduce, вы можете посетить Apache HadoopMapReduce tutorial, который проходит через код, стоящий за примером. Когда вы будете готовы к настройке кластера, прочтите руководство Apache FoundationHadoop Cluster Setup.

Related