Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

161 строка
5.8 KiB
Markdown

# Лабораторная работа №2. Реализация алгоритма MapReduce
## Цель
* Научиться реализовывать алгоритмы в парадигме MapReduce
## Выполнение
Защита лабораторной работы подразумевает наличие отчета, который должен содержать пункты задания, команды, которые вы вводите и ответы системы на них.
При необходимости - комментарии по полученным результатам.
### Задачи
* Разработать на языке Python алгоритм в парадигме MapReduce в соответствии с вариантом.
* Разработку и тестирование допускается проводить в локальной системе.
* Запустить разработанный алгоритм в среде Hadoop.
* Убедиться в корректности полученных результатов.
* Сформировать отчет о выполненной работе. В отчете показать финальный результат работы (или его часть).
### Варианты заданий
#### 1. Сравнение посещаемости сайтов в разное время
__Дано__: ежедневные журналы посещений сайтов за три дня:
* [День 1](assets/visits1.txt)
* [День 2](assets/visits2.txt)
* [День 3](assets/visits3.txt)
Формат данных:
```
19:05:44 telegram.com 622
01:08:01 vk.com 935
22:28:55 mail.ru 154
17:15:16 mail.ru 100
```
Первый столбец - время посещения.
Второй столбец - сайт.
Третий столбец - продолжительность посещения в секундах.
__Требуется__: определить среднюю за три дня продолжительность посещения в первой и второй половине дня.
Алгоритм должен включать этап `combiner`.
Первая половина дня: с 00:00:00 по 12:59:59
Вторая половина дня: с 13:00:00 по 23:59:59
Формат вывода:
```
telegram.com 510 234
vk.com 384 651
mail.ru 154 324
```
Первый столбец - сайт.
Второй столбец - средняя продожительность посещения в первой половине дня в секундах.
Третий столбец - средняя продожительность посещения во второй половине дня в секундах.
#### 2. Определение минимального расстояния до каждой вершины
__Дано__: [структура графа](assets/graph.txt) в виде списка смежности:
```
1 0 {2,3,4}
2 INF {5,6}
6 INF {}
```
Первый столбец - номер вершины.
Второй столбец - известное расстояние до данной вершины.
Третий столбец - список смежных вершин.
__Требуется__: рассчитать минимальное расстояние до каждой вершины используя метод поиска в ширину (BFS).
Формат вывода:
```
1 0 {2,3,4}
2 1 {5,6}
6 2 {}
```
Структура такая же, как и у входного файла.
Вес всех ребер равен единице.
Обратить внимание, что данный алгоритм итеративный, т.е. требует нескольких запусков задачи MapReduce.
Итоговый результат должен отображать расстояние до __всех__ вершин графа.
#### 3. PageRank
__Дано__: [Структура графа сети](assets/pagerank.txt) в виде ключа, веса PageRank и смежных вершин
```
1 0.200 {2,4}
2 0.200 {3,5}
3 0.200 {4}
...
```
Параметры:
```
alpha = 0.1
```
__Требуется__: рассчитать веса PageRank по прошествии 3 итераций.
```
1 0.080 {2,4}
2 0.170 {3,5}
3 0.170 {4}
...
```
Структура такая же, как и у входного файла. Все округления до 3 знаков после запятой.
#### 4. TF-IDF
__Дано__: [Текст трех произведений](assets/shakespear.txt). В начале каждой строки указан номер произведения.
__Требуется__: рассчитать tf-idf вес каждого слова в каждом произведении.
Формат вывода:
```
Слово1#1 0.123
Слово1#2 0.234
Слово2#1 0.678
```
После слова через решетку идет номер документа, далее через отступ - tf-idf вес данного слова в данном документе.
### Вопросы
1. Какие этапы существуют у MapReduce задач?
2. Какие принцип должны закладываться в алгоритмы, написанные в парадигме MapReduce?
2. В каком виде осуществляется передача данных между Map и Reduce?
3. Как определяется число mapper-процессов в MapReduce задаче?
4. Как могут представляться графы в математическом виде? Как они обычно представляются в задачах MapReduce?
5. В чем заключается и как работает алгоритм PageRank?