SlideShare a Scribd company logo
1 of 55
Download to read offline
08 MapReduce - Приемы и стратегии реализации

                        О.В. Сухорослов

                     oleg.sukhoroslov@gmail.com


                            13.04.2012




О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                      ()                                         13.04.2012   1 / 55
План лекции

   Приемы и стратегии реализации MapReduce-программ
   Подробности про Hadoop Java API
   Hadoop Streaming
   ДЗ №3




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   2 / 55
Приемы и стратегии




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   3 / 55
Ограничения

   Достаточно жесткая модель вычислений

   Синхронизация между задачами только в фазе shuffle

   Ограниченный контроль над тем, где, когда и какие данные будет
   обрабатывать конкретная задача




   О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                         ()                                         13.04.2012   4 / 55
Возможности

   Использование сложных ключей и значений для управления
   процессом вычислений

   Выполнение заданного кода при инициализации и завершении
   map- и reduce-задач

   Сохранение состояния внутри map- и reduce-задач при обработке
   группы записей

   Определение порядка сортировки промежуточных ключей

   Определение разбиения пространства промежуточных ключей
   между reduce-задачами

   Композиция нескольких MapReduce-заданий


   О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                         ()                                         13.04.2012   5 / 55
Показатели качества MapReduce-программ
   Масштабируемость
         В идеале - линейная
               При двукратном увеличении объема данных происходит
               двукратное увеличение времени работы
               При двукратном увеличении количества машин происходит
               двукратное уменьшение времени работы

   Эффективное использование ресурсов кластера




    О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   6 / 55
Локальная агрегация промежуточных данных

   Ключевой прием при реализации эффективных
   MapReduce-программ

   Позволяет уменьшить накладные расходы на передачу данных
   между задачами
         Сохрание данных на диск
         Передача по сети

   Позволяет сбалансировать reduce-задачи




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   7 / 55
Combiner
   Для ассоциативных и коммутативных реализаций reduce
         combiner == reducer

   Не должен менять типы ключей и значений между map и reduce
         На входе - выходные типы для map
         На выходе - входные типы для reduce

   Hadoop: динамически использует combine как дополнительную
   оптимизацию
         Может вообще не запускаться или запускаться несколько раз,
         в том числе на стороне reduce




    О.В. Сухорослов    08 MapReduce - Приемы и стратегии реализации
                           ()                                         13.04.2012   8 / 55
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
In-mapper Combining
   Преимущества
         Не требуется отдельный combiner
         Полный контроль над тем когда и как происходит локальная
         аггрегация
         Обычно более эффективен, чем combiner

   Недостатки
         Нарушает функциональную парадигму
               Хранение состояния может привести к зависмости поведения
               программы от порядка обработки записей
         Для хранения промежуточных результатов требуется достаточный
         объем памяти
               Становится узким местом при масштабировании
               Сброс агрегированных данных через каждые N записей или при
               достижении лимита памяти




    О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   10 / 55
Пример

   Вычисление среднего значения для каждого ключа

   На входе: (string key, int val)
   На выходе: (string key, int avg_val)

   Нельзя использовать reduce в качестве combine!




   О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                           ()                                         13.04.2012   11 / 55
Вариант 1




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   12 / 55
Вариант 2




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   13 / 55
Вариант 3




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   14 / 55
Стратегии Pairs и Stripes
    Пример: Вычиcление word co-occurence matrix
         Матрица M размера NxN, где N - количество слов в коллекции
         документов
         Элемент M(i, j) содержит количество раз слова wi и wj
         встречаются вместе в некотором контексте (предложение,
         параграф, документ...)




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   15 / 55
Стратегия Pairs




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   16 / 55
Стратегия Stripes




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   17 / 55
Какая стратегия лучше?

   Эффективнее / быстрее?

   Лучше масштабируется?




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   18 / 55
Сравнение

   Pairs генерирует гораздо больше записей и данных

   Stripes генерирует меньше промежуточных ключей и использует
   более компактный ключ, но сложное значение

   В Stripes больше возможностей для применения локальной
   агрегации

   Stripes предъявляет бОльшие требования к доступной памяти
         Эти требования могут расти с ростом данных




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   19 / 55
Существуют ли промежуточные стратегии?




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   20 / 55
Нормализация значений co-occurence matrix

   Относительная частота




   Реализация для стратегии Stripes?
   Реализация для стратегии Pairs?




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   21 / 55
Reduce для стратегии Pairs




   Прием Order inversion
         Распределение промежуточных ключей с одинаковым первым
         словом на один reducer
         Выдача в Map вспомогательных записей с ключами (wi , ∗)
         Сортировка промежуточных ключей по первому слову так, чтобы
         вспомогательные значения были первыми
         Хранение внутреннего состояния в Reduce


    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   22 / 55
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        }
11
12        public String getFirst () {
13            return first ;
14        }
15
16        public String getSecond () {
17            return second ;
18        }


       О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                             ()                                         13.04.2012   23 / 55
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
Hadoop: Сложный тип ключа (Сравнение)

1      @Override
2      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
Hadoop: Сложный тип ключа (Строковый вид, Хэш)

1      @Override
2      public String toString () {
3          return first + " + " + second ;
4      }
5
6      @Override
7      public int hashCode () {
8          return toString (). hashCode ();
9      }




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   26 / 55
Hadoop: Сложный тип значения

   ... implements Writable




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   27 / 55
Hadoop: Partitioner

     Класс org.apache.hadoop.mapreduce.Partitioner<K,V>
1   abstract int getPartition ( K key , V value , int numPartitions )




     По умолчанию используется реализация HashPartitioner

1   ( key . hashCode () & Integer . MAX_VALUE ) % numReduceTasks




     Пример своей реализации см. в коде к лекции




      О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   28 / 55
Hadoop: Sort Comparator
   Используется для
         переопределения порядка сортировки ключей
         оптимизации
               RawComparator, не требующий десериализации ключей в объекты

   Job.setSortComparatorClass(...)

   Готовые реализации
         LongWritable.DecreasingComparator

   Собственная реализация
         См. пример в коде к лекции




    О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   29 / 55
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
JOIN

   Reduce-side join

   Map-side join

   Memory-backed join

   Distributed memory




   О.В. Сухорослов    08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   31 / 55
Подробности про Hadoop Java API




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   32 / 55
Количество Map- и Reduce-задач
   Большое количество задач
         улучшает балансировку нагрузки между узлами
         уменьшает время восстановления после отказов
         НО увеличивает накладные расходы
               Время выполнения задачи должно быть не менее 30-40 секунд




    О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   33 / 55
Количество 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
Количество Reduce-задач

   По умолчанию 1 (всегда в локальном режиме)

   Опция -D mapred.reduce.tasks=N
   Метод job.setNumReduceTasks(int)

   Подбирается опытным путем
   Немного меньше числа reduce-слотов на кластере (одна волна)
   Несколько “волн”, если reduce-задачи очень большие

   0, если Reduce не нужен
         Результаты map записываются напрямую в HDFS




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   35 / 55
Объект Context

   Передается в Map и Reduce

   Предоставляет доступ к конфигурации задания
         Context.getConfiguration()

   Принимает пары (key,value) на выходе
         Context.write(key, value)

   Позволяет обновлять статус задания и счетчики




    О.В. Сухорослов     08 MapReduce - Приемы и стратегии реализации
                            ()                                         13.04.2012   36 / 55
Повторное использование 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
Статус и счетчики
     Уведомление мастера о том, что задача “жива”
           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
1
Distributed 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
Разнородные данные на входе и выходе
   Входные данные
         По умолчанию все файлы имеют один формат и обрабатываются
         одним 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
Композиция 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
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
Отладка программ
       Логи
             Содержимое 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
Учебный пример (BigramCount + BigramSort)

   Доступ к конфигурации задания в Mapper/Reduce.configure()
   Реализация сложных типов ключей
   Реализация Partitioner
   Реализация Comparator
   Статус и счетчики
   Передача дополнительных файлов (DistributedCache)

   In-mapper combining
   Pairs
   Secondary Sorting




    О.В. Сухорослов    08 MapReduce - Приемы и стратегии реализации
                           ()                                         13.04.2012   44 / 55
Запуск примера

     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
Старый и новый 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
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
Пример: mapper.py

1   # !/ usr / bin / env python
2
3   import sys
4
5   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
Пример: 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              continue
14
15        try :
16            word2count [ word ] = word2count [ word ] + count
17        except :
18            word2count [ word ] = count
19
20   for word in word2count . keys ():
21       print ’% s  t % s ’ % ( word , word2count [ word ])

        О.В. Сухорослов      08 MapReduce - Приемы и стратегии реализации
                                 ()                                         13.04.2012   49 / 55
Запуск примера

     Локальный тест
1   $ cat text | python mapper . py | sort | python reducer . py



     Запуск на кластере
1   $ hadoop jar
2   / usr / lib / hadoop / contrib / streaming / hadoop - streaming -0.20.2 - cdh3u3 . jar
3   - file ./ mapper . py - mapper ./ mapper . py
4   - file ./ reducer . py - reducer ./ reducer . py
5   - input / data / wiki / ru / articles - output ru - count
6   - numReduceTasks 75




       О.В. Сухорослов      08 MapReduce - Приемы и стратегии реализации
                                ()                                         13.04.2012   50 / 55
Домашнее задание №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
Данные
   /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
Отчет к ДЗ должен включать

   Описание решений
   Исходный код программ
   Параметры запуска MapReduce-заданий
   Время выполнения заданий
   Пути к результатам в HDFS




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   53 / 55
Ограничение на объем памяти

   Лимит памяти для map- и reduce-задач: 1 Gb




    О.В. Сухорослов   08 MapReduce - Приемы и стратегии реализации
                          ()                                         13.04.2012   54 / 55
MapReduce-очереди
   default
         Используется по-умолчанию
         Содержит, как минимум, половину слотов кластера
               152 map / 76 reduce
         Допускает одновременное выполнение нескольких заданий
         Рекомендуется использовать для отладочных запусков

   single
         Гарантированно доступна половина слотов кластера
         Допускает одновременное выполнение только одного задания
         Рекомендуется использовать для корректного измерения времени
         выполнения задания
               В web-интерфейсе отображается полное время, включая ожидание
               в очереди
               Начало выполнения задания можно отсчитывать с момента
               запуска первой map-задачи
         Запуск задания в очереди single
               Опция ’-D mapred.job.queue.name=single’
    О.В. Сухорослов      08 MapReduce - Приемы и стратегии реализации
                             ()                                         13.04.2012   55 / 55

More Related Content

What's hot

Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++Olga Maksimenkova
 
О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"Yandex
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Olga Maksimenkova
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простомуNikolay Grebenshikov
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIAlexey Paznikov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Big data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphsBig data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphsAlexey Zinoviev
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 

What's hot (20)

Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"О.В.Сухорослов "Паралленльные вычисления"
О.В.Сухорослов "Паралленльные вычисления"
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Big data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphsBig data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphs
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

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

  • 1. 08 MapReduce - Приемы и стратегии реализации О.В. Сухорослов oleg.sukhoroslov@gmail.com 13.04.2012 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 1 / 55
  • 2. План лекции Приемы и стратегии реализации MapReduce-программ Подробности про Hadoop Java API Hadoop Streaming ДЗ №3 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 2 / 55
  • 3. Приемы и стратегии О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 3 / 55
  • 4. Ограничения Достаточно жесткая модель вычислений Синхронизация между задачами только в фазе shuffle Ограниченный контроль над тем, где, когда и какие данные будет обрабатывать конкретная задача О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 4 / 55
  • 5. Возможности Использование сложных ключей и значений для управления процессом вычислений Выполнение заданного кода при инициализации и завершении map- и reduce-задач Сохранение состояния внутри map- и reduce-задач при обработке группы записей Определение порядка сортировки промежуточных ключей Определение разбиения пространства промежуточных ключей между reduce-задачами Композиция нескольких MapReduce-заданий О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 5 / 55
  • 6. Показатели качества MapReduce-программ Масштабируемость В идеале - линейная При двукратном увеличении объема данных происходит двукратное увеличение времени работы При двукратном увеличении количества машин происходит двукратное уменьшение времени работы Эффективное использование ресурсов кластера О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 6 / 55
  • 7. Локальная агрегация промежуточных данных Ключевой прием при реализации эффективных MapReduce-программ Позволяет уменьшить накладные расходы на передачу данных между задачами Сохрание данных на диск Передача по сети Позволяет сбалансировать reduce-задачи О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 7 / 55
  • 8. Combiner Для ассоциативных и коммутативных реализаций reduce combiner == reducer Не должен менять типы ключей и значений между map и reduce На входе - выходные типы для map На выходе - входные типы для reduce Hadoop: динамически использует combine как дополнительную оптимизацию Может вообще не запускаться или запускаться несколько раз, в том числе на стороне reduce О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 8 / 55
  • 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. In-mapper Combining Преимущества Не требуется отдельный combiner Полный контроль над тем когда и как происходит локальная аггрегация Обычно более эффективен, чем combiner Недостатки Нарушает функциональную парадигму Хранение состояния может привести к зависмости поведения программы от порядка обработки записей Для хранения промежуточных результатов требуется достаточный объем памяти Становится узким местом при масштабировании Сброс агрегированных данных через каждые N записей или при достижении лимита памяти О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 10 / 55
  • 11. Пример Вычисление среднего значения для каждого ключа На входе: (string key, int val) На выходе: (string key, int avg_val) Нельзя использовать reduce в качестве combine! О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 11 / 55
  • 12. Вариант 1 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 12 / 55
  • 13. Вариант 2 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 13 / 55
  • 14. Вариант 3 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 14 / 55
  • 15. Стратегии Pairs и Stripes Пример: Вычиcление word co-occurence matrix Матрица M размера NxN, где N - количество слов в коллекции документов Элемент M(i, j) содержит количество раз слова wi и wj встречаются вместе в некотором контексте (предложение, параграф, документ...) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 15 / 55
  • 16. Стратегия Pairs О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 16 / 55
  • 17. Стратегия Stripes О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 17 / 55
  • 18. Какая стратегия лучше? Эффективнее / быстрее? Лучше масштабируется? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 18 / 55
  • 19. Сравнение Pairs генерирует гораздо больше записей и данных Stripes генерирует меньше промежуточных ключей и использует более компактный ключ, но сложное значение В Stripes больше возможностей для применения локальной агрегации Stripes предъявляет бОльшие требования к доступной памяти Эти требования могут расти с ростом данных О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 19 / 55
  • 20. Существуют ли промежуточные стратегии? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 20 / 55
  • 21. Нормализация значений co-occurence matrix Относительная частота Реализация для стратегии Stripes? Реализация для стратегии Pairs? О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 21 / 55
  • 22. Reduce для стратегии Pairs Прием Order inversion Распределение промежуточных ключей с одинаковым первым словом на один reducer Выдача в Map вспомогательных записей с ключами (wi , ∗) Сортировка промежуточных ключей по первому слову так, чтобы вспомогательные значения были первыми Хранение внутреннего состояния в Reduce О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 22 / 55
  • 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 } 11 12 public String getFirst () { 13 return first ; 14 } 15 16 public String getSecond () { 17 return second ; 18 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 23 / 55
  • 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. Hadoop: Сложный тип ключа (Сравнение) 1 @Override 2 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. Hadoop: Сложный тип ключа (Строковый вид, Хэш) 1 @Override 2 public String toString () { 3 return first + " + " + second ; 4 } 5 6 @Override 7 public int hashCode () { 8 return toString (). hashCode (); 9 } О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 26 / 55
  • 27. Hadoop: Сложный тип значения ... implements Writable О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 27 / 55
  • 28. Hadoop: Partitioner Класс org.apache.hadoop.mapreduce.Partitioner<K,V> 1 abstract int getPartition ( K key , V value , int numPartitions ) По умолчанию используется реализация HashPartitioner 1 ( key . hashCode () & Integer . MAX_VALUE ) % numReduceTasks Пример своей реализации см. в коде к лекции О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 28 / 55
  • 29. Hadoop: Sort Comparator Используется для переопределения порядка сортировки ключей оптимизации RawComparator, не требующий десериализации ключей в объекты Job.setSortComparatorClass(...) Готовые реализации LongWritable.DecreasingComparator Собственная реализация См. пример в коде к лекции О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 29 / 55
  • 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. JOIN Reduce-side join Map-side join Memory-backed join Distributed memory О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 31 / 55
  • 32. Подробности про Hadoop Java API О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 32 / 55
  • 33. Количество Map- и Reduce-задач Большое количество задач улучшает балансировку нагрузки между узлами уменьшает время восстановления после отказов НО увеличивает накладные расходы Время выполнения задачи должно быть не менее 30-40 секунд О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 33 / 55
  • 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. Количество Reduce-задач По умолчанию 1 (всегда в локальном режиме) Опция -D mapred.reduce.tasks=N Метод job.setNumReduceTasks(int) Подбирается опытным путем Немного меньше числа reduce-слотов на кластере (одна волна) Несколько “волн”, если reduce-задачи очень большие 0, если Reduce не нужен Результаты map записываются напрямую в HDFS О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 35 / 55
  • 36. Объект Context Передается в Map и Reduce Предоставляет доступ к конфигурации задания Context.getConfiguration() Принимает пары (key,value) на выходе Context.write(key, value) Позволяет обновлять статус задания и счетчики О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 36 / 55
  • 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. Статус и счетчики Уведомление мастера о том, что задача “жива” 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. 1 Distributed 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. Разнородные данные на входе и выходе Входные данные По умолчанию все файлы имеют один формат и обрабатываются одним 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. Композиция 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. 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. Отладка программ Логи Содержимое 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. Учебный пример (BigramCount + BigramSort) Доступ к конфигурации задания в Mapper/Reduce.configure() Реализация сложных типов ключей Реализация Partitioner Реализация Comparator Статус и счетчики Передача дополнительных файлов (DistributedCache) In-mapper combining Pairs Secondary Sorting О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 44 / 55
  • 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. Старый и новый 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. 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. Пример: mapper.py 1 # !/ usr / bin / env python 2 3 import sys 4 5 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. Пример: 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 continue 14 15 try : 16 word2count [ word ] = word2count [ word ] + count 17 except : 18 word2count [ word ] = count 19 20 for word in word2count . keys (): 21 print ’% s t % s ’ % ( word , word2count [ word ]) О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 49 / 55
  • 50. Запуск примера Локальный тест 1 $ cat text | python mapper . py | sort | python reducer . py Запуск на кластере 1 $ hadoop jar 2 / usr / lib / hadoop / contrib / streaming / hadoop - streaming -0.20.2 - cdh3u3 . jar 3 - file ./ mapper . py - mapper ./ mapper . py 4 - file ./ reducer . py - reducer ./ reducer . py 5 - input / data / wiki / ru / articles - output ru - count 6 - numReduceTasks 75 О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 50 / 55
  • 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. Данные /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. Отчет к ДЗ должен включать Описание решений Исходный код программ Параметры запуска MapReduce-заданий Время выполнения заданий Пути к результатам в HDFS О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 53 / 55
  • 54. Ограничение на объем памяти Лимит памяти для map- и reduce-задач: 1 Gb О.В. Сухорослов 08 MapReduce - Приемы и стратегии реализации () 13.04.2012 54 / 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