3. Общие замечания
Очистка от мусора и приведение слов к нижнему регистру
Число map-задач не нужно задавать явно
Слишком большое кол-во reduce-задач
>76 доступных reduce-слотов в очереди single
Контроль используемой памяти в Map/Reduce
1 Runtime . getRuntime (). totalMemory ()
2 - Runtime . getRuntime (). freeMemory ()
Осторожнее с key/value-объектами, передаваемыми в map/reduce
Hadoop повторно использует объекты1
1
http://wikidoop.com/wiki/Hadoop/ObjectReuse
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 3 / 13
4. Задача 3.1
Этап 1. Подсчет частот слов
см. WordCount
Combiner или In-map combine
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 4 / 13
5. Задача 3.1
Этап 1. Подсчет частот слов
см. WordCount
Combiner или In-map combine
Этап 2. Выделение TOP20
Сортировка по убыванию частоты
Выдача в map (−count, word)
job.setSortComparatorClass(LongWritable.DecreasingComparator.class)
class MyDescComparator extends WritableComparator
Собственный тип ключа с реализацией compareTo()
Streaming?
Выделение TOP-слов
Combiner
==Reducer
In-map combine (хранение TOP или отсечение по порогу частоты)
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 4 / 13
6. Задача 3.1 - Альтернативное решение
Одно MR-задание с несколькими Reduce
В Reduce Этапа 1 отсекаем TOP20 слов
Получаем R файлов с локальными TOP20
hadoop fs -cat /top-results/part-* | sort -nr -k 2 | head -20
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 5 / 13
7. Вопрос
Что если надо было отсортировать по частоте все слова?
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 6 / 13
8. Задача 3.2
Количество статей
Слайды к лекции 8
Статистика задачи 3.1 (Map input records)
Отдельное MR-задание
Счетчик, обновляемый в map, и считываемый в reduce
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 7 / 13
9. Задача 3.2
Map
(title, text) → (word, <title, tf>)
В памяти накапливаем статистику по всем словам статьи и
подсчитываем TF
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 8 / 13
10. Задача 3.2
Map
(title, text) → (word, <title, tf>)
В памяти накапливаем статистику по всем словам статьи и
подсчитываем TF
Reduce
(word, [<title, tf>...]) → (word, [<title, tf-idf>...])
Подсчитываем все статьи с данным словом, запоминая N статей c
наибольшим TF
Для реализации TOP в памяти удобно использовать
TreeSet/TreeMap
Вычисляем IDF и выдаем результирующую строку индекса
StringBuilder вместо конкатенации в цикле
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 8 / 13
11. Задача 3.2
Map
(title, text) → (word, <title, tf>)
В памяти накапливаем статистику по всем словам статьи и
подсчитываем TF
Reduce
(word, [<title, tf>...]) → (word, [<title, tf-idf>...])
Подсчитываем все статьи с данным словом, запоминая N статей c
наибольшим TF
Для реализации TOP в памяти удобно использовать
TreeSet/TreeMap
Вычисляем IDF и выдаем результирующую строку индекса
StringBuilder вместо конкатенации в цикле
Combiner?
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 8 / 13
12. Задача 3.2 - Альтернативные решения
Сложный ключ WordTfKey
Map: (title, text) → (<word, tf>, title)
Распределение по word (реализация hashCode())
Сортировка по word и TF в убывающем порядке (реализация
compareTo())
Для Streaming см. KeyFieldBasedPartitioner2 /Comparator3
В Reduce достаточно запомнить первые N записей
2
http://hadoop.apache.org/common/docs/current/streaming.html#Hadoop+Partitioner+Class
3
http://hadoop.apache.org/common/docs/current/streaming.html#Hadoop+Comparator+Class
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 9 / 13
13. Задача 3.2 - Альтернативные решения
Сложный ключ WordTfKey
Map: (title, text) → (<word, tf>, title)
Распределение по word (реализация hashCode())
Сортировка по word и TF в убывающем порядке (реализация
compareTo())
Для Streaming см. KeyFieldBasedPartitioner2 /Comparator3
В Reduce достаточно запомнить первые N записей
Стратегия Stripes
Map: [(title, text)...] → (word, < TOP[<title, tf>...], article_count >)
В памяти накапливаем для каждого слова TOP статей (по TF) и
кол-во статей со словом
Reduce: merge полученных записей, подсчет IDF, выдача строки
индекса
2
http://hadoop.apache.org/common/docs/current/streaming.html#Hadoop+Partitioner+Class
3
http://hadoop.apache.org/common/docs/current/streaming.html#Hadoop+Comparator+Class
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 9 / 13
14. Задача 3.2 - Просмотр индекса
1 hadoop fs - cat / index / part -* | grep -P ’^ hadoop t ’
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 10 / 13
16. Критерии оценки
Отлично - от 34 баллов
Хорошо - от 28 баллов
Зачет - от 22 баллов
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 12 / 13
17. Сроки
30 мая - последний срок сдачи ДЗ
31 мая - выставление оценок
1 курс
Прием долгов до 10 июля
Можно получить только "зачет"
О.В. Сухорослов () 12 Разбор ДЗ №3,4 18.05.2012 13 / 13