Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
08 MapReduce - Приемы и стратегии реализации                        О.В. Сухорослов                     oleg.sukhoroslov@g...
План лекции   Приемы и стратегии реализации MapReduce-программ   Подробности про Hadoop Java API   Hadoop Streaming   ДЗ №...
Приемы и стратегии    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()          ...
Ограничения   Достаточно жесткая модель вычислений   Синхронизация между задачами только в фазе shuffle   Ограниченный контр...
Возможности   Использование сложных ключей и значений для управления   процессом вычислений   Выполнение заданного кода пр...
Показатели качества MapReduce-программ   Масштабируемость         В идеале - линейная               При двукратном увеличе...
Локальная агрегация промежуточных данных   Ключевой прием при реализации эффективных   MapReduce-программ   Позволяет умен...
Combiner   Для ассоциативных и коммутативных реализаций reduce         combiner == reducer   Не должен менять типы ключей ...
In-mapper Combining   Hadoop: Mapper         void setup(Mapper.Context context)         void map(K1 key, V1 value, Mapper....
In-mapper Combining   Преимущества         Не требуется отдельный combiner         Полный контроль над тем когда и как про...
Пример   Вычисление среднего значения для каждого ключа   На входе: (string key, int val)   На выходе: (string key, int av...
Вариант 1    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()                   ...
Вариант 2    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()                   ...
Вариант 3    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()                   ...
Стратегии Pairs и Stripes    Пример: Вычиcление word co-occurence matrix         Матрица M размера NxN, где N - количество...
Стратегия Pairs    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()             ...
Стратегия Stripes    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                          ()           ...
Какая стратегия лучше?   Эффективнее / быстрее?   Лучше масштабируется?    О.В. Сухорослов   08 MapReduce - Приемы и страт...
Сравнение   Pairs генерирует гораздо больше записей и данных   Stripes генерирует меньше промежуточных ключей и использует...
Существуют ли промежуточные стратегии?    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                  ...
Нормализация значений co-occurence matrix   Относительная частота   Реализация для стратегии Stripes?   Реализация для стр...
Reduce для стратегии Pairs   Прием Order inversion         Распределение промежуточных ключей с одинаковым первым         ...
Hadoop: Сложный тип ключа 1   public static class Bigram 2           implements WritableComparable < Bigram > { 3 4       ...
Hadoop: Сложный тип ключа (Сериализация) 1      @Override 2      public void readFields ( DataInput in ) throws IOExceptio...
Hadoop: Сложный тип ключа (Сравнение)1      @Override2      public int compareTo ( Bigram o ) {3          if (! first . eq...
Hadoop: Сложный тип ключа (Строковый вид, Хэш)1      @Override2      public String toString () {3          return first + ...
Hadoop: Сложный тип значения   ... implements Writable    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации  ...
Hadoop: Partitioner     Класс org.apache.hadoop.mapreduce.Partitioner<K,V>1   abstract int getPartition ( K key , V value ...
Hadoop: Sort Comparator   Используется для         переопределения порядка сортировки ключей         оптимизации          ...
Secondary Sorting   Иногда требуется упорядочить промежуточные значения для   данного ключа на входе Reduce   Возможные ре...
JOIN   Reduce-side join   Map-side join   Memory-backed join   Distributed memory   О.В. Сухорослов    08 MapReduce - Прие...
Подробности про Hadoop Java API    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации                         ...
Количество Map- и Reduce-задач   Большое количество задач         улучшает балансировку нагрузки между узлами         умен...
Количество Map-задач    10-100 maps / node    Кратное количеству map-слотов на кластере    Опция -D mapred.map.tasks=N    ...
Количество Reduce-задач   По умолчанию 1 (всегда в локальном режиме)   Опция -D mapred.reduce.tasks=N   Метод job.setNumRe...
Объект Context   Передается в Map и Reduce   Предоставляет доступ к конфигурации задания         Context.getConfiguration()...
Повторное использование Writable-объектов 1   public void map (...) { 2     ... 3     for ( String word : words ) { 4     ...
Статус и счетчики     Уведомление мастера о том, что задача “жива”           mapreduce.task.timeout = 10 минут по умолчани...
1Distributed Cache         Загрузка дополнительных файлов на узлы кластера вместе с         заданием                Вспомо...
Разнородные данные на входе и выходе   Входные данные         По умолчанию все файлы имеют один формат и обрабатываются   ...
Композиция MapReduce-заданий   Цепочки заданий        Выходные данные задания являются входными для следующего        зада...
Task JVM Reuse     Конфигурационный параметр mapreduce.job.jvm.numtasks           1 - JVM запускается заново для каждой за...
Отладка программ       Логи             Содержимое stdout и stderr задач можно просмотреть через             Web-интерфейс...
Учебный пример (BigramCount + BigramSort)   Доступ к конфигурации задания в Mapper/Reduce.configure()   Реализация сложных ...
Запуск примера     BigramCount - подсчет всех биграмм1   hadoop jar bigram . jar lecture8 . BigramCount 2   -D mapred . re...
Старый и новый Java API4       Новый API             Пакет org.apache.hadoop.mapreduce             Рекомендуется использов...
Hadoop Streaming5       Позволяет использовать в качестве реализаций Map и Reduce       произвольные программы и скрипты  ...
Пример: mapper.py1   # !/ usr / bin / env python23   import sys45   for line in sys . stdin :6       line = line . strip (...
Пример: reducer.py 1   # !/ usr / bin / env python 2   import sys 3 4   word2count = {} 5 6   for line in sys . stdin : 7 ...
Запуск примера     Локальный тест1   $ cat text | python mapper . py | sort | python reducer . py     Запуск на кластере1 ...
Домашнее задание №3       Задача 1 Определить 20 наиболее часто встречающихся слов в       русской (только русские слова) ...
Данные   /data/wiki/ru/articles         1,501,046 статей, 4.7 GB         (/data/wiki/ru/raw: 2.2M страниц, 8.7 GB)        ...
Отчет к ДЗ должен включать   Описание решений   Исходный код программ   Параметры запуска MapReduce-заданий   Время выполн...
Ограничение на объем памяти   Лимит памяти для map- и reduce-задач: 1 Gb    О.В. Сухорослов   08 MapReduce - Приемы и стра...
MapReduce-очереди   default         Используется по-умолчанию         Содержит, как минимум, половину слотов кластера     ...
Upcoming SlideShare
Loading in …5
×

О.В.Сухорослов "MapReduce: приемы и стратегии реализации"

О.В.Сухорослов "MapReduce: приемы и стратегии реализации", 13.03.2012, место показа МФТИ, Школа анализа данных (ШАД)

  • Be the first to comment

О.В.Сухорослов "MapReduce: приемы и стратегии реализации"

  1. 1. 08 MapReduce - Приемы и стратегии реализации О.В. Сухорослов oleg.sukhoroslov@gmail.com 13.04.2012О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 1 / 55
  2. 2. План лекции Приемы и стратегии реализации MapReduce-программ Подробности про Hadoop Java API Hadoop Streaming ДЗ №3 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 2 / 55
  3. 3. Приемы и стратегии О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 3 / 55
  4. 4. Ограничения Достаточно жесткая модель вычислений Синхронизация между задачами только в фазе shuffle Ограниченный контроль над тем, где, когда и какие данные будет обрабатывать конкретная задача О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 4 / 55
  5. 5. Возможности Использование сложных ключей и значений для управления процессом вычислений Выполнение заданного кода при инициализации и завершении map- и reduce-задач Сохранение состояния внутри map- и reduce-задач при обработке группы записей Определение порядка сортировки промежуточных ключей Определение разбиения пространства промежуточных ключей между reduce-задачами Композиция нескольких MapReduce-заданий О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 5 / 55
  6. 6. Показатели качества MapReduce-программ Масштабируемость В идеале - линейная При двукратном увеличении объема данных происходит двукратное увеличение времени работы При двукратном увеличении количества машин происходит двукратное уменьшение времени работы Эффективное использование ресурсов кластера О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 6 / 55
  7. 7. Локальная агрегация промежуточных данных Ключевой прием при реализации эффективных MapReduce-программ Позволяет уменьшить накладные расходы на передачу данных между задачами Сохрание данных на диск Передача по сети Позволяет сбалансировать reduce-задачи О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 7 / 55
  8. 8. Combiner Для ассоциативных и коммутативных реализаций reduce combiner == reducer Не должен менять типы ключей и значений между map и reduce На входе - выходные типы для map На выходе - входные типы для reduce Hadoop: динамически использует combine как дополнительную оптимизацию Может вообще не запускаться или запускаться несколько раз, в том числе на стороне reduce О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 8 / 55
  9. 9. In-mapper Combining Hadoop: Mapper void setup(Mapper.Context context) void map(K1 key, V1 value, Mapper.Context context) void cleanup(Mapper.Context context) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 9 / 55
  10. 10. In-mapper Combining Преимущества Не требуется отдельный combiner Полный контроль над тем когда и как происходит локальная аггрегация Обычно более эффективен, чем combiner Недостатки Нарушает функциональную парадигму Хранение состояния может привести к зависмости поведения программы от порядка обработки записей Для хранения промежуточных результатов требуется достаточный объем памяти Становится узким местом при масштабировании Сброс агрегированных данных через каждые N записей или при достижении лимита памяти О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 10 / 55
  11. 11. Пример Вычисление среднего значения для каждого ключа На входе: (string key, int val) На выходе: (string key, int avg_val) Нельзя использовать reduce в качестве combine! О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 11 / 55
  12. 12. Вариант 1 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 12 / 55
  13. 13. Вариант 2 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 13 / 55
  14. 14. Вариант 3 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 14 / 55
  15. 15. Стратегии Pairs и Stripes Пример: Вычиcление word co-occurence matrix Матрица M размера NxN, где N - количество слов в коллекции документов Элемент M(i, j) содержит количество раз слова wi и wj встречаются вместе в некотором контексте (предложение, параграф, документ...) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 15 / 55
  16. 16. Стратегия Pairs О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 16 / 55
  17. 17. Стратегия Stripes О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 17 / 55
  18. 18. Какая стратегия лучше? Эффективнее / быстрее? Лучше масштабируется? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 18 / 55
  19. 19. Сравнение Pairs генерирует гораздо больше записей и данных Stripes генерирует меньше промежуточных ключей и использует более компактный ключ, но сложное значение В Stripes больше возможностей для применения локальной агрегации Stripes предъявляет бОльшие требования к доступной памяти Эти требования могут расти с ростом данных О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 19 / 55
  20. 20. Существуют ли промежуточные стратегии? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 20 / 55
  21. 21. Нормализация значений co-occurence matrix Относительная частота Реализация для стратегии Stripes? Реализация для стратегии Pairs? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 21 / 55
  22. 22. Reduce для стратегии Pairs Прием Order inversion Распределение промежуточных ключей с одинаковым первым словом на один reducer Выдача в Map вспомогательных записей с ключами (wi , ∗) Сортировка промежуточных ключей по первому слову так, чтобы вспомогательные значения были первыми Хранение внутреннего состояния в Reduce О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 22 / 55
  23. 23. Hadoop: Сложный тип ключа 1 public static class Bigram 2 implements WritableComparable < Bigram > { 3 4 private String first ; 5 private String second ; 6 7 public void set ( String first , String second ) { 8 this . first = first ; 9 this . second = second ;10 }1112 public String getFirst () {13 return first ;14 }1516 public String getSecond () {17 return second ;18 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 23 / 55
  24. 24. Hadoop: Сложный тип ключа (Сериализация) 1 @Override 2 public void readFields ( DataInput in ) throws IOException 3 first = in . readUTF (); 4 second = in . readUTF (); 5 } 6 7 @Override 8 public void write ( DataOutput out ) throws IOException { 9 out . writeUTF ( first );10 out . writeUTF ( second );11 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 24 / 55
  25. 25. Hadoop: Сложный тип ключа (Сравнение)1 @Override2 public int compareTo ( Bigram o ) {3 if (! first . equals ( o . first )) {4 return first . compareTo ( o . first );5 } else {6 return second . compareTo ( o . second );7 }8 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 25 / 55
  26. 26. Hadoop: Сложный тип ключа (Строковый вид, Хэш)1 @Override2 public String toString () {3 return first + " + " + second ;4 }56 @Override7 public int hashCode () {8 return toString (). hashCode ();9 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 26 / 55
  27. 27. Hadoop: Сложный тип значения ... implements Writable О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 27 / 55
  28. 28. Hadoop: Partitioner Класс org.apache.hadoop.mapreduce.Partitioner<K,V>1 abstract int getPartition ( K key , V value , int numPartitions ) По умолчанию используется реализация HashPartitioner1 ( key . hashCode () & Integer . MAX_VALUE ) % numReduceTasks Пример своей реализации см. в коде к лекции О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 28 / 55
  29. 29. Hadoop: Sort Comparator Используется для переопределения порядка сортировки ключей оптимизации RawComparator, не требующий десериализации ключей в объекты Job.setSortComparatorClass(...) Готовые реализации LongWritable.DecreasingComparator Собственная реализация См. пример в коде к лекции О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 29 / 55
  30. 30. Secondary Sorting Иногда требуется упорядочить промежуточные значения для данного ключа на входе Reduce Возможные решения Сортировка в памяти внутри Reduce Value-to-key conversion: (key, value) => (<key,subkey>, value) Hadoop: Использование GroupingComparator для вызова reduce один раз для каждого значения key См. пример в дистрибутиве Hadoop: /src/examples/org/apache/hadoop/examples/SecondarySort.java О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 30 / 55
  31. 31. JOIN Reduce-side join Map-side join Memory-backed join Distributed memory О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 31 / 55
  32. 32. Подробности про Hadoop Java API О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 32 / 55
  33. 33. Количество Map- и Reduce-задач Большое количество задач улучшает балансировку нагрузки между узлами уменьшает время восстановления после отказов НО увеличивает накладные расходы Время выполнения задачи должно быть не менее 30-40 секунд О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 33 / 55
  34. 34. Количество Map-задач 10-100 maps / node Кратное количеству map-слотов на кластере Опция -D mapred.map.tasks=N Метод job.setNumMapTasks(int) Определяется кол-вом порций (splits), на которые разбиваются входные данные Размер порции определяется на основе нескольких параметров Размер блока HDFS (128 Mb) Параметр mapred.max.split.size (=Long.MAX) Параметр mapred.min.split.size (=0)split_size = max(min_split_size, min(max_split_size, dfs_block_size)) Каждая порция может включать содержимое только 1 файла Несколько больших файлов лучше, чем много мелких О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 34 / 55
  35. 35. Количество Reduce-задач По умолчанию 1 (всегда в локальном режиме) Опция -D mapred.reduce.tasks=N Метод job.setNumReduceTasks(int) Подбирается опытным путем Немного меньше числа reduce-слотов на кластере (одна волна) Несколько “волн”, если reduce-задачи очень большие 0, если Reduce не нужен Результаты map записываются напрямую в HDFS О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 35 / 55
  36. 36. Объект Context Передается в Map и Reduce Предоставляет доступ к конфигурации задания Context.getConfiguration() Принимает пары (key,value) на выходе Context.write(key, value) Позволяет обновлять статус задания и счетчики О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 36 / 55
  37. 37. Повторное использование Writable-объектов 1 public void map (...) { 2 ... 3 for ( String word : words ) { 4 context . write ( new Text ( word ) , new IntWritable (1)); 5 } 6 } 1 class MyMapper ... { 2 Text wordText = new Text (); 3 IntWritable one = new IntWritable (1); 4 public void map (...) { 5 ... 6 for ( String word : words ) { 7 wordText . set ( word ); 8 context . write ( word , one ); 9 }10 }11 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 37 / 55
  38. 38. Статус и счетчики Уведомление мастера о том, что задача “жива” mapreduce.task.timeout = 10 минут по умолчанию Обновление статуса задачи1 context . setStatus ( String status ) Глобальные счетчики1 static enum Counters { INPUT_WORDS , ... }2 ...3 context . getCounter ( Counters . INPUT_WORDS ). increment (1) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 38 / 55
  39. 39. 1Distributed Cache Загрузка дополнительных файлов на узлы кластера вместе с заданием Вспомогательные данные, текстовые файлы, архивы, библиотеки Файлы должны быть предварительно размещены в HDFS Или переданы пути к локальным файлам с помощью Опций командной строки -files, -archives, -libjars Java API:1 conf . set (" tmpfiles ( tmparchives , tmpjars )" , " file :// path ...") Файлы копируются один раз перед началом выполнения задания Не допускается изменение данных файлов во время выполнения задания 1 http://hadoop.apache.org/mapreduce/docs/current/mapred_tutorial.html#DistributedCache О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 39 / 55
  40. 40. Разнородные данные на входе и выходе Входные данные По умолчанию все файлы имеют один формат и обрабатываются одним Map-классом org.apache.hadoop.mapreduce.lib.input.MultipleInputs Несколько наборов входных файлов Для каждого набора можно указать свой формат и Map-класс Выходные данные По умолчанию один файл на reducer part-00000, part-00001, ... org.apache.hadoop.mapreduce.lib.output.MultipleOutputs Несколько файлов на выходе Каждый файл может иметь свой формат и типы ключей-значений О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 40 / 55
  41. 41. Композиция MapReduce-заданий Цепочки заданий Выходные данные задания являются входными для следующего задания Объединение map-функций в один map org.apache.hadoop.mapreduce.lib.chain.ChainMapper/ChainReducer [MAP+ / REDUCE MAP*] Более сложные зависимости между заданиями (DAG) См. пакет org.apache.hadoop.mapreduce.lib.jobcontrol О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 41 / 55
  42. 42. Task JVM Reuse Конфигурационный параметр mapreduce.job.jvm.numtasks 1 - JVM запускается заново для каждой задачи -1 - JVM используется повторно неограниченное количество раз (для задач данного задания)1 Job . getConfiguration (). setInt (" mapreduce . job . jvm . numtasks " , О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 42 / 55
  43. 43. Отладка программ Логи Содержимое stdout и stderr задач можно просмотреть через Web-интерфейс MapReduce Счетчики Profiling2 -D mapred.task.profile=true Debugging3 2 http://hadoop.apache.org/mapreduce/docs/current/mapred_tutorial.html#Profiling 3 http://hadoop.apache.org/mapreduce/docs/current/mapred_tutorial.html#Debugging О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 43 / 55
  44. 44. Учебный пример (BigramCount + BigramSort) Доступ к конфигурации задания в Mapper/Reduce.configure() Реализация сложных типов ключей Реализация Partitioner Реализация Comparator Статус и счетчики Передача дополнительных файлов (DistributedCache) In-mapper combining Pairs Secondary Sorting О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 44 / 55
  45. 45. Запуск примера BigramCount - подсчет всех биграмм1 hadoop jar bigram . jar lecture8 . BigramCount 2 -D mapred . reduce . tasks =150 3 / data / wiki / en / articles / user / USER / enwiki - bg skip . en BigramSort - выдача TOP биграмм для каждого слова1 hadoop jar bigram . jar lecture8 . BigramTop 2 -D mapred . reduce . tasks =1 3 / user / USER / enwiki - bg / user / USER / enwiki - bg - top 100 10 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 45 / 55
  46. 46. Старый и новый Java API4 Новый API Пакет org.apache.hadoop.mapreduce Рекомендуется использовать Все примеры на лекциях используют новый API Старый API Пакет org.apache.hadoop.mapred Рекомендуется использовать только, если не хватает возможностей нового API Скоро может стать deprecated Не рекомендуется использовать в одной программе оба API 4 http://hadoop.apache.org/mapreduce/docs/current/api/ О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 46 / 55
  47. 47. Hadoop Streaming5 Позволяет использовать в качестве реализаций Map и Reduce произвольные программы и скрипты Обмен данными между Hadoop и программой происходит через стандартные потоки ввода-вывода stdin: входные данные в виде строк key [tab] value stdout: выходные данные в виде строк key [tab] value 5 http://hadoop.apache.org/mapreduce/docs/current/streaming.html О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 47 / 55
  48. 48. Пример: mapper.py1 # !/ usr / bin / env python23 import sys45 for line in sys . stdin :6 line = line . strip (). lower ()7 words = line . split ()8 for word in words :9 print ’% s t % s ’ % ( word , 1) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 48 / 55
  49. 49. Пример: reducer.py 1 # !/ usr / bin / env python 2 import sys 3 4 word2count = {} 5 6 for line in sys . stdin : 7 line = line . strip () 8 9 word , count = line . split ( ’ t ’ , 1)10 try :11 count = int ( count )12 except ValueError :13 continue1415 try :16 word2count [ word ] = word2count [ word ] + count17 except :18 word2count [ word ] = count1920 for word in word2count . keys ():21 print ’% s t % s ’ % ( word , word2count [ word ]) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 49 / 55
  50. 50. Запуск примера Локальный тест1 $ cat text | python mapper . py | sort | python reducer . py Запуск на кластере1 $ hadoop jar2 / usr / lib / hadoop / contrib / streaming / hadoop - streaming -0.20.2 - cdh3u3 . jar3 - file ./ mapper . py - mapper ./ mapper . py4 - file ./ reducer . py - reducer ./ reducer . py5 - input / data / wiki / ru / articles - output ru - count6 - numReduceTasks 75 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 50 / 55
  51. 51. Домашнее задание №3 Задача 1 Определить 20 наиболее часто встречающихся слов в русской (только русские слова) и английской Википедиях Задача 2 Построить инвертированный индекс для русской и английской Википедий Формат индекса: word [tab] title1 [tab] tf-idf1 [tab] title2 [tab] tf-idf2 ... Статьи должны быть отсортированы в порядке убывания tf-idf6 Разумно ограничить список N наиболее релевантными статьями Из индекса следует исключить высокочастотные слова, полученные при решении Задачи 1 Срок - 2 недели 6 http://en.wikipedia.org/wiki/Tf-idf О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 51 / 55
  52. 52. Данные /data/wiki/ru/articles 1,501,046 статей, 4.7 GB (/data/wiki/ru/raw: 2.2M страниц, 8.7 GB) Фрагмент для отладки: /data/wiki/ru/articles-part /data/wiki/en/articles 3,946,725 статей, 11 GB (/data/wiki/en/raw: 12M страниц, 35 GB) Фрагмент для отладки: /data/wiki/en/articles-part Формат: каждая статья в виде строки title [tab] content О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 52 / 55
  53. 53. Отчет к ДЗ должен включать Описание решений Исходный код программ Параметры запуска MapReduce-заданий Время выполнения заданий Пути к результатам в HDFS О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 53 / 55
  54. 54. Ограничение на объем памяти Лимит памяти для map- и reduce-задач: 1 Gb О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 54 / 55
  55. 55. MapReduce-очереди default Используется по-умолчанию Содержит, как минимум, половину слотов кластера 152 map / 76 reduce Допускает одновременное выполнение нескольких заданий Рекомендуется использовать для отладочных запусков single Гарантированно доступна половина слотов кластера Допускает одновременное выполнение только одного задания Рекомендуется использовать для корректного измерения времени выполнения задания В web-интерфейсе отображается полное время, включая ожидание в очереди Начало выполнения задания можно отсчитывать с момента запуска первой map-задачи Запуск задания в очереди single Опция ’-D mapred.job.queue.name=single’ О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 55 / 55

×