9.3 KiB
Лабораторная работа №1. Знакомство с Hadoop
Цель
- Установить вирутальную машину с Hadoop
- Познакомиться с работой в файловой системе HDFS
- Реализовать MapReduce задачу для подсчета слов в тексте (Word Count)
Выполнение
Защита лабораторной работы подразумевает наличие отчета, который должен содержать пункты задания, команды, которые вы вводите и ответы системы на них. При необходимости - комментарии по полученным результатам.
Установка вирутальной машины
На компьютере должна быть установлена вирутальная машина Oracle VM VirtualBox. Скачать дистрибутив можно по ссылке (распространяется бесплатно под лицензией GPLv2)
Кроме того, на компьютере должен находиться образ виртуальной машины (файлы с расширением .ovf
и .vmdk
). В лаборатории его можно скачать из сетевой папки компьютера DESKTOP_TENJU5T.
Для установки образа нужно выполнить следующие действия:
- Открыть VirtualBox
- В меню "Файл" выбрать "Импорт конфигурации".
- Указать путь до файла с образом
.ovf
. - В параметрах импорта указать размер памяти ОЗУ 8192 Мб, остальное оставить без изменений.
- Нажать кнопку "Импорт" и дождаться завершения.
В меню появится новая виртуальная машина - включить ее и дождаться загрузки
Знакомство с работой в файловой системе HDFS
-
В домашней директории локальной файловой системы создайте директорию
/stud
. В дальнейшем все требуемые файлы создавайте в этой директории -
Создайте текстовый файл
hello_hadoop.txt
с двумя строками. В первой строке - Фамилия и Имя, во второй строке - текст:
Hello Hadoop! The Apache Hadoop is a framework that allows the distributed processing of large data sets across clusters of computers using simple programming models. Hadoop provides a software framework for distributed storage and processing of big data
- Сформируйте текстовый файл большого объема (начиная от нескольких Мб). Например, воспользуйтесь сайтом lib.ru.
Скачать текстовый файл можно с помощью команды wget
, передав в кавычках адрес файла, например:
wget "http://lib.ru/LITRA/PUSHKIN/p3.txt"
- Поверьте, что файл имеет корректную кодировку. При необходимости, исправить кодировку можно одной из команд, которые запишут результат в новый файл:
cat p3.txt | iconv -f windows-1251 -t utf8 > p3_utf.txt
cat p3.txt | iconv -f koi8-r -t utf8 > p3_utf.txt
-
Просмотрите содержимое домашней директории файловой системы HDFS. Поясните результат.
-
Создайте в HDFS директорию
/stud
в домашней директории. В дальнейшем все требуемые файлы создавайте в этой директории -
Создайте файл
hello_hdfs.txt
с двумя строками. В первой строке - Фамилия и Имя, во второй строке - текст Hello HDFS! -
Выведите содержимое папки
/stud
, соданной в HDFS, поясните результат. -
Скопируйте файл
hello_hdfs.txt
в локальную файловую систему в папку/stud
, убедитесь что копирование выполнено. -
Скопируйте из локальной файловой системы в HDFS 'большой текстовый файл', созданный в п.3.
-
Выведите содержимое папки
/stud
, соданной в HDFS, поясните результат.
Реализация и запуск MapReduce задачи
В этом пункте задания нужно выполнить подсчет количества повторений каждого слова в файле, созданном в п.3.
Для этого нужно реализовать на языке Python два модуля: mapper
и reducer
, проверить (отладить) их работу
в локальной файловой системе на небольшом файле, а затем перенести модули в HDFS и выполнить обработку большого текста.
-
Реализуйте в локальной папке
/stud
два модуля на языке Python:mapper.py
иreducer.py
(см. лекции) -
Проверьте работу
mapper.py
, подав на вход файл 'hello_hadoop.txt' -
Проверьте работу связки mapper-reducer на файле 'hello_hadoop.txt'
Для связки в терминале нескольких команд в одну удобно использовать pipeline - последовательность команд, разделенных символом |
.
При этом вывод первой команды будет являться входными данными для следующией и так далее по цепочке.
Например, чтобы подать на вход mapper.py
данные из файла 'hello_hadoop.txt', а результат отсортировать по ключу, нужно выполнить цепочку:
прочитать файл -> результат чтения передать в mapper.py
-> результат выполнения отсортировать:
cat hello_hadoop.txt | mapper.py | sort
- Выполните подсчет слов в большом текстовом файле, находящемся в HDFS
Для запуска MapReduce задачи, написанной на языке, отличном от Java, существует специальная утилита Hadoop Streaming. Для запуска необходимо выполнить jar-файл hadoop-streaming.jar, подав в качестве параметров информацию о входном файле, расположенном в HDFS, о папке в HDFS, куда должен быть записан результат, о расположении кода mapper'а и reducer'а.
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-input <hdfs/path/to/input_file> \
-output <hdfs/output/dir> \
-mapper "python </path/to/mapper.py>" \
-reducer "python </path/to/reducer.py>"
Путь к файлу hadoop-streaming.jar может меняться в зависимости от операционной системы и настройках при установке.
В опциях -mapper
, -reducer
слово python указывает ОС, что необходимо выполнить программу на языке Python, расположенную по заданному локальному пути.
В случае ошибки выполнения и последующего перезапуска команды может возникнуть сообщение об ошибке, что папке, указанная в -output
уже существует. В этом случае ее нужно удалить.
- После успешного выполнения расчетов сохраните в отчет и проанализируйте выведенную статистику по задаче, укажите какие файлы создались в выходной директории и первые 50 строк каждого.
Вопросы
- Что такое Hadoop?
- Что такое HDFS?
- Что такое MapReduce?
- Какие этапы существуют в модели MapReduce?
- Какими командами можно скопировать файл из локальной файловой системы в HDFS и обратно?
- Для чего нужна и как работает утилита hadoop-streaming?