Оглавление:

1. Введение HDFS и MapReduce.

2. Команды HDFS.

2. Запускаем задачу MapReduce на кластере HADOOP (на примере WordCount).


Введение HDFS и MapReduce.

В предыдущем разделе мы создали 3-х нодовый кластер HADOOP. Основой HADOOP являются распределенная файловая система HDFS и модель программирования MapReduce.

В итоге мы имеем распределенную файловую систему HDFS со следующими параметрами: replication-3 и blocksize - 128 Mb. Это значит, что любой файл, загружаемый в HDFS, будет "порезан" на блоки по 128 Mb и каждый из этих блоков будет сохранен на трех разных машинах кластера. Таким образом, выход из строя 2-х DataNode кластера не приведет к потере информации. Может показаться, что это слишком избыточно, но у нас просто очень маленький кластер, который не оптимален, мы просто разбираемся, что к чему. В реальности количество DataNode-машин может достигать нескольких тысяч, а параметр репликации десятков. Важно: потеря NameNode-машин более критична, так в данном случае мы теряем информацию о местах хранения блоков, поэтому данные узлы кластера должны быть более устойчивы к сбоям.

Наверно вы уже поняли, что хранить в HDFS файлы размером менее 128 Mb (при blocksize = 128 Mb) - большая роскошь. В данном случае файл в один байт будет храниться блоком в 128 Mb. Данный параметр настраивается, значение зависит от объемов хранимой информации.

MapReduce – это представленная компанией Google модель распределённых вычислений, а также её реализации, используемые для параллельной обработки больших объёмов информации. В Интернете данной теме посвящено множество статей. Для понимания концепции рекомендую ЭТУ и ЭТУ. Суть заключается в том, что не данные передаются программе, а программа (она меньше по объему) передаётся к данным (система же распределенная). Таким образом, на разных машинах можно производить одни и те же вычисления над разными кусками (blocksize суть HDFS) данных, которые не превышают объем оперативной памяти вычислителя. Второй особенностью MapReduce является то, что некоторые процессы сортировки полученных результатов скрыты от программиста, ему нужно заботиться лишь о том, как преобразовать данные на этапах Map и Reduce.


Команды HDFS.

Некоторые команды HDFS:

Обзор каталогов или файлов (в примере корневой каталог /): hadoop fs -ls /

Удаление каталога или файла: hadoop fs -rm -r /folder

Создание каталога (в примере user в корне): hadoop fs -mkdir /user

Копировать файл в HDFS (в примере /home/user/file.txt): hadoop fs -put /home/user/file.txt /user/

Копировать файл из HDFS (в примере /user/file.txt) на локальную машину в /home/user: hadoop fs -get /user/file.txt /home/user/

Изменение прав доступа к каталогу (в примере user, 777 -предоставлять все права всем) или файлу: hadoop fs -chmod 777 -R /user


Запускаем задачу MapReduce на кластере HADOOP (на примере WordCount).

Приступим к запуску задачи MapReduce на кластере HADOOP. Так как нативным языком для HADOOP является Java, то задачи проще всего писать на этом языке. Мы упростим задачу, воспользовавшись стандартным примером WordCount (подсчет частоты слов в тексте) из состава поставки.

Последовательность действий следующая:

1. Загрузить исследуемый файл в HDFS.

2. Запустить задачу.

3. Выгрузить результат из HDFS в локальную систему.


Итак нам сначала надо найти любой текстовый файл, желательно размером побольше. Сохраним или создадим любой текстовый файл в домашней директории. Я замахнулся на Шекспира, скачал его сборник и сохранил в файл william.txt.

Создадим входной каталог HDFS: hadoop fs -mkdir /input

Загружаем исследуемый файл в HDFS: hadoop fs -put /home/hduser/william.txt /input

Проверим, загрузился ли файл командой: hadoop fs -ls /input


Все готово для запуска задачи.

Сначала нужно выяснить, в каком каталоге находятся примеры HADOOP, для версии 2.9.1 и для моих настроек путь следующий: /usr/local/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar


Имя файла может быть другим в более поздних версиях, например wordcount.jar или wordcount-example.jar.

Ура! Все готово к запуску! Запускаем задачу командой: hadoop jar запускаемый.jar wordcount /входной_каталог /выходной каталог

Внимание! Выходной каталог создаст сама задача, он не должен существовать, иначе будет сообщение об ошибке.

Запускаем задачу, пример представлен на рисунке ниже.


В итоге мы получим каталог /out в котором находятся два файла: _SUCCES и part-r-00000.

Результаты подсчета находятся в файле part-r-00000, скопируем его в локальную систему:hadoop fs -get /out/part-r-00000 /home/hduser/


Откроем файл в редакторе: sudo gedit part-r-00000


В файле представлено каждое слово, напротив которого число, показывающее, сколько раз слово встретилось в тексте.

Стоит отметить, что задачи MapReduce можно писать и на других языках программирования, Python пробовал запускать сам, видел примеры для С и даже PHP.

Далее мы будем наращивать наш кластер и поставим на него SQL-движок HIVE.

Всем спасибо, пишите комментарии здесь или в группе Вконтакте.

Комментарии

Комментировать могуть только зарегистрированные пользователи

Перевести страницу (translate page)
Реклама