Родитель
							
								
									022a882770
								
							
						
					
					
						Сommit
						e5d4571c71
					
				| @ -0,0 +1,124 @@ | |||||||
|  |  # Лабораторная работа №1. Знакомство с Hadoop | ||||||
|  |   | ||||||
|  |  ## Цель | ||||||
|  |   | ||||||
|  |  * Установить вирутальную машину с Hadoop | ||||||
|  |  * Познакомиться с работой в файловой системе HDFS | ||||||
|  |  * Реализовать MapReduce задачу для подсчета слов в тексте (Word Count) | ||||||
|  |   | ||||||
|  | ## Выполнение | ||||||
|  | 
 | ||||||
|  | Защита лабораторной работы подразумевает наличие отчета, который должен содержать пункты задания, команды, которые вы вводите и ответы системы на них. | ||||||
|  | При необходимости - комментарии по полученным результатам. | ||||||
|  | 
 | ||||||
|  | ### Установка вирутальной машины | ||||||
|  | На компьютере должна быть установлена вирутальная машина Oracle VM VirtualBox. Скачать дистрибутив можно по [ссылке](https://www.virtualbox.org/wiki/Downloads) (распространяется бесплатно под лицензией GPLv2) | ||||||
|  | Кроме того, на компьютере должен находиться образ виртуальной машины (файлы с расширением `.ovf` и `.vmdk`). В лаборатории его можно скачать из сетевой папки компьютера DESKTOP_TENJU5T. | ||||||
|  | Для установки образа нужно выполнить следующие действия: | ||||||
|  | 
 | ||||||
|  | * Открыть VirtualBox | ||||||
|  | * В меню "Файл" выбрать "Импорт конфигурации". | ||||||
|  | * Указать путь до файла с образом `.vmdk`.  | ||||||
|  | * В параметрах импорта указать размер памяти ОЗУ 8192 Мб, остальное оставить без изменений. | ||||||
|  | * Нажать кнопку "Импорт" и дождаться завершения. | ||||||
|  | 
 | ||||||
|  | В меню появится новая виртуальная машина - включить ее и дождаться загрузки | ||||||
|  | 
 | ||||||
|  | ### Знакомство с работой в файловой системе HDFS | ||||||
|  | 
 | ||||||
|  | 1. В домашней директории локальной файловой системы создайте директорию `/stud`. **В дальнейшем все требуемые файлы создавайте в этой директории** | ||||||
|  | 
 | ||||||
|  | 2. Создайте текстовый файл `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_ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 3. Сформируйте текстовый файл большого объема (начиная от нескольких Мб). Например, воспользуйтесь сайтом [lib.ru](http://lib.ru/). | ||||||
|  | 
 | ||||||
|  | Скачать текстовый файл можно с помощью команды `wget`, передав в кавычках адрес файла, например: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | wget "http://lib.ru/LITRA/PUSHKIN/p3.txt"  | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 4. Поверьте, что файл имеет корректную кодировку. При необходимости, исправить кодировку можно одной из команд, которые запишут результат в новый файл:  | ||||||
|  | ``` | ||||||
|  | cat p3.txt | iconv -f windows-1251 -t utf8 > p3_utf.txt  | ||||||
|  | 
 | ||||||
|  | cat p3.txt | iconv -f koi8-r -t utf8 > p3_utf.txt | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 5. Просмотрите содержимое домашней директории файловой системы HDFS. Поясните результат. | ||||||
|  | 
 | ||||||
|  | 6. Создайте в HDFS директорию `/stud` в домашней директории. **В дальнейшем все требуемые файлы создавайте в этой директории** | ||||||
|  | 
 | ||||||
|  | 7. Создайте файл `hello_hdfs.txt` с двумя строками. В первой строке - Фамилия и Имя, во второй строке - текст _Hello HDFS!_ | ||||||
|  | 
 | ||||||
|  | 8. Выведите содержимое папки `/stud`, соданной в HDFS, поясните результат. | ||||||
|  | 
 | ||||||
|  | 9. Скопируйте файл `hello_hdfs.txt` в локальную файловую систему в папку `/stud`, убедитесь что копирование выполнено. | ||||||
|  | 
 | ||||||
|  | 10. Скопируйте из локальной файловой системы в HDFS 'большой текстовый файл', созданный в п.3.  | ||||||
|  | 
 | ||||||
|  | 11. Выведите содержимое папки `/stud`, соданной в HDFS, поясните результат. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### Реализация и запуск MapReduce задачи | ||||||
|  | 
 | ||||||
|  | В этом пункте задания нужно выполнить подсчет количества повторений каждого слова в файле, созданном в п.3. | ||||||
|  | 
 | ||||||
|  | Для этого нужно реализовать на языке Python два модуля: `mapper` и `reducer`, проверить (отладить) их работу  | ||||||
|  | в локальной файловой системе на небольшом файле, а затем перенести модули в HDFS и выполнить обработку большого текста. | ||||||
|  | 
 | ||||||
|  | 1. Реализуйте в локальной папке `/stud` два модуля на языке Python: `mapper.py` и `reducer.py` (см. лекции) | ||||||
|  | 
 | ||||||
|  | 2. Проверьте работу `mapper.py`, подав на вход файл 'hello_hadoop.txt' | ||||||
|  | 
 | ||||||
|  | 3. Проверьте работу связки mapper-reducer на файле 'hello_hadoop.txt' | ||||||
|  | 
 | ||||||
|  | Для связки в терминале нескольких команд в одну удобно использовать [_pipeline_](https://www.gnu.org/software/bash/manual/html_node/Pipelines.html) - последовательность команд, разделенных символом `|`. | ||||||
|  | При этом вывод первой команды будет являться входными данными для следующией и так далее по цепочке. | ||||||
|  | Например, чтобы подать на вход `mapper.py` данные из файла 'hello_hadoop.txt', а результат отсортировать по ключу, нужно выполнить цепочку: | ||||||
|  | 
 | ||||||
|  | прочитать файл -> результат чтения передать в `mapper.py` -> результат выполнения отсортировать: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | cat hello_hadoop.txt | mapper.py | sort | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 4. Выполните подсчет слов в большом текстовом файле, находящемся в HDFS | ||||||
|  | 
 | ||||||
|  | Для запуска MapReduce задачи, написанной на языке, отличном от Java, существует специальная утилита [Hadoop Streaming](https://hadoop.apache.org/docs/stable1/streaming.html). | ||||||
|  | Для  запуска необходимо выполнить 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` уже существует. В этом случае ее нужно удалить. | ||||||
|  | 
 | ||||||
|  | 5. После успешного выполнения расчетов сохраните в отчет и проанализируйте выведенную статистику по задаче, укажите какие файлы создались в выходной директории и первые 50 строк каждого. | ||||||
|  | 
 | ||||||
|  | ### Вопросы | ||||||
|  | 
 | ||||||
|  | 1. Что такое Hadoop? | ||||||
|  | 2. Что такое HDFS? | ||||||
|  | 3. Что такое MapReduce? | ||||||
|  | 4. Какие этапы существуют в модели MapReduce? | ||||||
|  | 5. Какими командами можно скопировать файл из локальной файловой системы в HDFS и обратно? | ||||||
|  | 6. Для чего нужна и как работает утилита _hadoop-streaming_? | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
					Загрузка…
					
					
				
		Ссылка в новой задаче