SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Методы распределенной обработки
больших объемов данных в Hadoop
Москва 2014
Лекция 5: MapReduce в Hadoop, алгоритмы
Алгоритмы и паттерны
MapReduce
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
WordCount
• Описание проблемы
– Есть коллекция документов
– Каждый документ – это набор термов (слов)
– Необходимо подсчитать кол-во вхождений
каждого терма во всех документах
• Дополнительно
– Функция может быть произвольной
– Напр., файл лога содержит время ответа.
Необходимо подсчитать среднее время.
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
WordCount, baseline
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map (docid id, doc d)
for all term t in doc d do
Emit(term t, count 1)
class Reducer
method Reduce (term t, counts [c1, c2,...])
sum = 0
for all count c in [c1, c2,...] do
sum = sum + c
Emit(term t, count sum)
WordCount, “In-mapper combining”, v.1
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map (docid id, doc d)
H = new AssociativeArray
for all term t in doc d do
H{t} = H{t} + 1
for all term t in H do
Emit(term t, count H{t})
• Минусы baseline
– Много лишних счетчиков от Mapper
– Агрегируем их для каждого документа
WordCount, Combiner
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map (docid id, doc d)
for all term t in doc d do
Emit(term t, count 1)
class Combiner
method Combine (term t, [c1, c2,...])
sum = 0
for all count c in [c1, c2,...] do
sum = sum + c
Emit(term t, count sum)
class Reducer
method Reduce (term t, counts [c1, c2,...])
sum = 0
for all count c in [c1, c2,...] do
sum = sum + c
Emit(term t, count sum)
• Для всех документов Mapper используем Combiner
WordCount, “In-mapper combining”, v.2
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Initialize
H = new AssociativeArray
method Map (docid id, doc d)
for all term t in doc d do
H{t} = H{t} + 1
method Close
for all term t in H do
Emit(term t, count H{t})
WordCount, “In-mapper combining”, v.2
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• “In-mapper combining”
– “Заворачиваем” функционал комбайнера в mapper
путем сохранения состояния между вызовами функции
map()
• Плюсы
– Скорость
• Почему это быстрее, чем стандартный Combiner?
• Минусы
– Требуется “ручное” управление памятью
– Потенциальная возможность для багов связанных с
сортировкой порядка элементов
Среднее значение, v.1
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(string t, integer r)
Emit(string t, integer r)
class Reducer
method Reduce(string t, integers [r1, r2, …])
sum = 0
cnt = 0
for all integers r in [r1, r2, …] do
sum = sum + r
cnt = cnt + 1
avg = sum / cnt
Emit(string t, integer avg)
Можно ли использовать Reducer в качестве Combiner?
Среднее значение, v.2
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(string t, integer r)
Emit(string t, integer r)
class Combiner
method Combine(string t, integers [r1, r2, …])
sum = 0
cnt = 0
for all integers r in [r1, r2, …] do
sum = sum + r
cnt = cnt + 1
Emit(string t, pair(sum, cnt))
class Reducer
method Reduce(string t, pairs[(s1,c1),(s2,c2) …])
sum = 0
cnt = 0
for all pairs p in [(s1,c1),(s2,c2) …]) do
sum = sum + p.s
cnt = cnt + p.c
avg = sum / cnt
Emit(string t, integer avg)
Почему это не работает?
Среднее значение, v.3
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(string t, integer r)
Emit(string t, pair (r,1))
class Combiner
method Combine(string t pairs[(s1,c1),(s2,c2) …]))
sum = 0
cnt = 0
for all pairs p in [(s1,c1),(s2,c2) …]) do
sum = sum + p.s
cnt = cnt + p.c
Emit(string t, pair(sum, cnt))
class Reducer
method Reduce(string t, pairs[(s1,c1),(s2,c2) …])
sum = 0
cnt = 0
for all pairs p in [(s1,c1),(s2,c2) …]) do
sum = sum + p.s
cnt = cnt + p.c
avg = sum / cnt
Emit(string t, pair (avg, cnt))
А так будет работать?
Среднее значение, v.4
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Initialize
S = new AssociativeArray
C = new AssociativeArray
method Map (string t, integer r)
S{t} = S{t} + r
C{t} = C{t} + 1
method Close
for all term t in S do
Emit(term t, pair(S{t}, C{t}))
Distinct Values (Unique Items Counting)
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Описание проблемы
– Есть множество записей
– Каждая запись содержит поле F
и производное число признаков
категорий G = {G1, G2, …}.
• Задача
– Подсчитать общее число
уникальных значений поля F
для каждого подмножества
записей для каждого значения в
каждой категории
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
Distinct Values, v.1
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Решение в две фазы (две задачи MapReduce)
• Первая фаза
– Mapper пишет все уникальные пары [G, F]
– Reducer подсчитывает общее кол-во вхождений
такой пары
– Основная цель этой фазы – гарантировать
уникальность значений F
• Вторая фаза
– Пары [G, F] группируются по G и затем считается
общее кол-во элементов в каждой группе
Distinct Values, v.1
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
// phase 1
class Mapper
method Map(null, record [value f, categories [g1, g2,...]])
for all category g in [g1, g2,...]
Emit(record [g, f], count 1)
class Reducer
method Reduce(record [g, f], counts [n1, n2, ...])
Emit(record [g, f], null )
// phase 2
class Mapper
method Map(record [f, g], null)
Emit(value g, count 1)
class Reducer
method Reduce(value g, counts [n1, n2,...])
Emit(value g, sum( [n1, n2,...] ) )
Distinct Values, v.2
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Требуется только одна фаза MapReduce
– Mapper
• Пишет значение и категории
– Reducer
• Исключает дубликаты из списка категорий для каждого значения
• Увеличивает счетчик для каждой категории
• В конце Reducer пишет общее кол-во для каждой категории
• Первая фаза
– Данный подход не очень хорошо масштабируется
– Подходит для небольшого числа категорий
• Напр. парсинг действий пользователей из web-логов
– Combiners позволят уменьшить кол-во дубликатов
перед фазой Reduce
Distinct Values, v.2
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(null, record [value f, categories [g1, g2,...] )
for all category g in [g1, g2,...]
Emit(value f, category g)
class Reducer
method Initialize
H = new AssociativeArray : category -> count
method Reduce(value f, categories [g1, g2,...])
[g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
for all category g in [g1', g2',...]
H{g} = H{g} + 1
method Close
for all category g in H do
Emit(category g, count H{g})
Cross-Correlation
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Описание проблемы
– Есть множество кортежей объектов
– Для каждой возможной пары объектов посчитать
число кортежей, где они встречаются вместе
– Если число объектов N, то N*N объектов будет обработано
• Применение
– Анализ текстов
• Кортежи – предложения, объекты – слова
– Маркетинг
• Покупатели, кто покупает одни товары, обычно покупают и
другие товары
• Если N*N небольшое и можно построить матрицу в
памяти, то реализация довольно проста
Cross-Correlation: Pairs
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Каждый Mapper принимает на вход кортеж
– Генерит все пары соседних объектов
– Для всех пар выполняет emit (a, b) → count
• Reducer суммирует все count для всех пар
– Combiners?
class Mapper
method Map(null, items [i1, i2,...] )
for all item i in [i1, i2,...]
for all item j in [i1, i2,...]
Emit(pair [i j], count 1)
class Reducer
method Reduce(pair [i j], counts [c1, c2,...])
s = sum([c1, c2,...])
Emit(pair[i j], count s)
Cross-Correlation: Pairs
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Плюсы
– Нет затрат по памяти
– Простая реализация
• Минусы
– Множество пар надо отсортировать и распределить
по редьюсерам (sort & shuffle)
– Combiner вряд ли поможет (почему?)
Cross-Correlation: Stripes
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Основная идея:
– Группировать пары вместе в ассоциативный массив
– Каждый Mapper принимает на вход
последовательность
• Генерит все пары рядом расположенных объектов
• Для каждого объекта выполняет
emit a → { b: countb, c: countc, d: countd … }
– Reducer’ы выполняют поэлементное
суммирование ассоциативных массивов
(a, b) → 1
(a, c) → 2
(a, d) → 5
(a, e) → 3
(a, f) → 2
a → { b: 1, d: 5, e: 3 }
a → { b: 1, c: 2, d: 2, f: 2 }
a → { b: 2, c: 2, d: 7, e: 3, f: 2 }
+
Cross-Correlation: Stripes
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(null, items [i1, i2,...] )
for all item i in [i1, i2,...]
H = new AssociativeArray : item -> counter
for all item j in [i1, i2,...]
H{j} = H{j} + 1
Emit(item i, stripe H)
class Reducer
method Reduce(item i, stripes [H1, H2,...])
H = new AssociativeArray : item -> counter
H = merge-sum( [H1, H2,...] )
for all item j in H.keys()
Emit(pair [i j], H{j})
Cross-Correlation: Stripes
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Плюсы
– Намного меньше операций сортировки и shuffle
– Возможно, более эффективное использование
Combiner
• Минусы
– Более сложная реализация
– Более “тяжелые” объекты для передаче данных
– Ограничения на размеры используемой памяти для
ассоциативных массивов
• Pairs vs Stripes
– Обычно, подход со stripes быстрее, чем с pairs
Реляционные паттерны
MapReduce
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
Selection
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(rowkey key, value t)
if t satisfies the predicate
Emit(value t, null)
Projection
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(rowkey key, value t)
value g = project(t) // выбрать необходимые поля в g
Emit(tuple g, null)
// используем Reducer для устранения дубликатов
class Reducer
method Reduce(value t, array n) // n - массив из nulls
Emit(value t, null)
Union
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
// на вход подаются элементы из двух множеств A и B
class Mapper
method Map(rowkey key, value t)
Emit(value t, null)
class Reducer
method Reduce(value t, array n) // n - массив из nulls
Emit(value t, null)
Intersection
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
// на вход подаются элементы из двух множеств A и B
class Mapper
method Map(rowkey key, value t)
Emit(value t, null)
class Reducer
method Reduce(value t, array n) // n - массив из nulls
if n.size() = 2
Emit(value t, null)
Difference
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
// на вход подаются элементы из двух множеств A и B
class Mapper
method Map(rowkey key, value t)
Emit(value t, string t.SetName) // t.SetName либо ‘A‘ либо ‘B'
class Reducer
// массив n может быть [‘A'], [‘B'], [‘A' ‘B‘] или [‘A', ‘B']
method Reduce(value t, array n)
if n.size() = 1 and n[1] = ‘A'
Emit(value t, null)
Symmetric Difference
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
// на вход подаются элементы из двух множеств A и B
class Mapper
method Map(rowkey key, value t)
Emit(value t, string t.SetName) // t.SetName либо ‘A‘ либо ‘B'
class Reducer
// массив n может быть [‘A'], [‘B'], [‘A' ‘B‘] или [‘A', ‘B']
method Reduce(value t, array n)
if n.size() = 1 and (n[1] = ‘A‘ or n[1] = ‘B‘)
Emit(value t, null)
GroupBy и Aggregation
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(null, tuple [value GroupBy, value AggregateBy, value ...])
Emit(value GroupBy, value AggregateBy)
class Reducer
method Reduce(value GroupBy, [v1, v2,...])
// aggregate() : sum(), max(),...
Emit(value GroupBy, aggregate( [v1, v2,...] ) )
Repartition Join
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Reduce Join, Sort-Merge Join
• Описание задачи
– Объединить два множества A и B по ключу k
• Решение
– Mapper проходит по всем значениям каждого
множества
– Выбирает ключ k и маркирует каждое значени тегом,
определяющим множество, откуда пришло значение
– Reducer получает все значения, объединенные по
одному ключу и размещает их по двум корзинам,
соответствующим каждому множеству
– После этого проходит по обеим корзинам и генерит
значения из двух множеств с общим ключом
Repartition Join
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Map(null, tuple [join_key k, value v1, value v2,...])
Emit(join_key k, tagged_tuple [set_name tag, values [v1, v2, ...] ] )
class Reducer
method Reduce(join_key k, tagged_tuples [t1, t2,...])
H = new AssociativeArray : set_name -> values
for all tagged_tuple t in [t1, t2,...] // separate values into 2 arrays
H{t.tag}.add(t.values)
for all values a in H{‘A'} // produce a cross-join of the two arrays
for all values b in H{‘B'}
Emit(null, [k a b] )
Repartition Join
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Минусы
– Mapper отправляет в output все данные, даже для тех
ключей, которые есть только в одном множестве
– Reducer должен хранить все значения для одного
ключа в памяти
• Нужно самостоятельно управлять памятью в случае, если
данные в нее не помещаются
Replicated Join
• Map Join, Hash Join
• Часто требуется объединять два множества
разных размеров – маленькое и большое
– Напр. список пользователей с логом их активности
• Для этого можно использовать хеш-таблицу,
куда загружать все элементы маленького
множества, сгруппированных по ключу k
• Затем, идти по элементам большого
множества в Mapper и выполнять lookup-
запрос к этой хеш-таблице
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
Replicated Join
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
class Mapper
method Initialize
H = new AssociativeArray : join_key -> tuple from A
A = load()
for all [ join_key k, tuple [a1, a2,...] ] in A
H{k} = H{k}.append( [a1, a2,...] )
method Map(join_key k, tuple B)
for all tuple a in H{k}
Emit(null, tuple [k a B] )
TF-IDF на MapReduce
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Term Frequency – Inverse Document Frequency
– Используется при работе с текстом
– В Information Retrieval
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• TF (term frequency — частота слова) — отношение числа вхождения
некоторого слова к общему количеству слов документа.
– Таким образом, оценивается важность слова в пределах отдельного
документа.
где ni есть число вхождений слова в документ, а в знаменателе — общее
число слов в данном документе.
• IDF (inverse document frequency — обратная частота документа) —
инверсия частоты, с которой некоторое слово встречается в
документах коллекции.
Где:
– |D| — количество документов в корпусе;
– — кол-во документов, в которых встречается ti (когда ni != 0).
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Что нужно будет вычислить
– Сколько раз слово T встречается в данном
документе (tf)
– Сколько документов, в котором встречается
данное слово T (n)
– Общее число документов (N)
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Job 1: Частота слова в документе
• Mapper
– Input: (docname, contents)
• Для каждого слова в документе надо сгенерить
пару (word, docname)
– Output: ((word, docname), 1)
• Reducer
– Суммирует число слов в документе
– Outputs: ((word, docname), tf)
• Combiner такой же как и Reducer
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Job 2: Кол-во документов для слова
• Mapper
– Input: ((word, docname), tf)
– Output: (word, (docname, tf, 1))
• Reducer
– Суммирует единицы чтобы посчитать n
– Output: ((word, docname), (tf,n))
TF-IDF
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Job 3: Расчет TF-IDF
• Mapper
– Input: ((word, docname), (tf,n))
• Подразумевается, что N известно (его легко
подсчитать)
– Output: ((word, docname), (TF*IDF))
• Reducer
– Не требуется
TF-IDF, масштабируемость
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
• Несколько MapReduce задач позволяют
реализовать сложные алгоритмы и улучшить
мастабируемость
– Думая в стиле MapReduce часто означает
разделение комплексных задач на более мелкие
• Стоит следить за тем, сколько используется
ОЗУ, при работе с большим объемом данных
– Каждый раз, когда необходимо хранить данные в
памяти, это может стать потенциальной
проблемой масштабируемости
Ресурсы
http://highlyscalable.wordpress.com/2012/02/01/mapreduce-
patterns/
Data-Intensive Text Processing with MapReduce
Jimmy Lin and Chris Dyer (Authors) (April, 2010)
Chapter3: MapReduce Algorithm Design
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
Вопросы?
ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ

Contenu connexe

Tendances

MariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB plc
 
03 - Hadoop. HDFS Shell-команды
03 - Hadoop. HDFS Shell-команды03 - Hadoop. HDFS Shell-команды
03 - Hadoop. HDFS Shell-командыRoman Brovko
 
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLE
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLEUnit 3 - Function & Grouping,Joins and Set Operations in ORACLE
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLEDrkhanchanaR
 
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)Aurimas Mikalauskas
 
Indexing the MySQL Index: Key to performance tuning
Indexing the MySQL Index: Key to performance tuningIndexing the MySQL Index: Key to performance tuning
Indexing the MySQL Index: Key to performance tuningOSSCube
 
Anatomy of classic map reduce in hadoop
Anatomy of classic map reduce in hadoop Anatomy of classic map reduce in hadoop
Anatomy of classic map reduce in hadoop Rajesh Ananda Kumar
 
Celery - A Distributed Task Queue
Celery - A Distributed Task QueueCelery - A Distributed Task Queue
Celery - A Distributed Task QueueDuy Do
 
Normalization
NormalizationNormalization
Normalizationmomo2187
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Big data Hadoop presentation
Big data  Hadoop  presentation Big data  Hadoop  presentation
Big data Hadoop presentation Shivanee garg
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaPostgreSQL-Consulting
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Prim's Algorithm on minimum spanning tree
Prim's Algorithm on minimum spanning treePrim's Algorithm on minimum spanning tree
Prim's Algorithm on minimum spanning treeoneous
 

Tendances (20)

MariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & Optimization
 
Apache Spark with Scala
Apache Spark with ScalaApache Spark with Scala
Apache Spark with Scala
 
03 - Hadoop. HDFS Shell-команды
03 - Hadoop. HDFS Shell-команды03 - Hadoop. HDFS Shell-команды
03 - Hadoop. HDFS Shell-команды
 
Linux final exam
Linux final examLinux final exam
Linux final exam
 
PLSQL
PLSQLPLSQL
PLSQL
 
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLE
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLEUnit 3 - Function & Grouping,Joins and Set Operations in ORACLE
Unit 3 - Function & Grouping,Joins and Set Operations in ORACLE
 
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
 
Indexing the MySQL Index: Key to performance tuning
Indexing the MySQL Index: Key to performance tuningIndexing the MySQL Index: Key to performance tuning
Indexing the MySQL Index: Key to performance tuning
 
Bellman ford algorithm
Bellman ford algorithmBellman ford algorithm
Bellman ford algorithm
 
Anatomy of classic map reduce in hadoop
Anatomy of classic map reduce in hadoop Anatomy of classic map reduce in hadoop
Anatomy of classic map reduce in hadoop
 
Unit 2 oracle9i
Unit 2  oracle9i Unit 2  oracle9i
Unit 2 oracle9i
 
Celery - A Distributed Task Queue
Celery - A Distributed Task QueueCelery - A Distributed Task Queue
Celery - A Distributed Task Queue
 
Normalization
NormalizationNormalization
Normalization
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Hadoop Overview kdd2011
Hadoop Overview kdd2011Hadoop Overview kdd2011
Hadoop Overview kdd2011
 
Big data Hadoop presentation
Big data  Hadoop  presentation Big data  Hadoop  presentation
Big data Hadoop presentation
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Galaxy Big Data with MariaDB
Galaxy Big Data with MariaDBGalaxy Big Data with MariaDB
Galaxy Big Data with MariaDB
 
Prim's Algorithm on minimum spanning tree
Prim's Algorithm on minimum spanning treePrim's Algorithm on minimum spanning tree
Prim's Algorithm on minimum spanning tree
 

En vedette

Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 

En vedette (8)

Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 

Similaire à Лекция 5. MapReduce в Hadoop (алгоритмы)

07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduceRoman Brovko
 
алексей романенко
алексей романенкоалексей романенко
алексей романенкоkuchinskaya
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Fwdays
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовMikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3Andrey Danilchenko
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
практика 13
практика 13практика 13
практика 13student_kai
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияpaulsmirnov
 
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...corehard_by
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Something about Golang
Something about GolangSomething about Golang
Something about GolangAnton Arhipov
 
08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduceRoman Brovko
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 

Similaire à Лекция 5. MapReduce в Hadoop (алгоритмы) (20)

07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce
 
алексей романенко
алексей романенкоалексей романенко
алексей романенко
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
практика 13
практика 13практика 13
практика 13
 
Синтез функциональных программ при помощи метода дедуктивных таблиц
Синтез функциональных программ при помощи метода дедуктивных таблицСинтез функциональных программ при помощи метода дедуктивных таблиц
Синтез функциональных программ при помощи метода дедуктивных таблиц
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...Обработка коллекций наизнанку: как применить много функций к одному аргументу...
Обработка коллекций наизнанку: как применить много функций к одному аргументу...
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Something about Golang
Something about GolangSomething about Golang
Something about Golang
 
08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 

Plus de Technopark

СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"Technopark
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"Technopark
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8Technopark
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1Technopark
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2Technopark
 

Plus de Technopark (18)

СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2
 

Лекция 5. MapReduce в Hadoop (алгоритмы)

  • 1. Методы распределенной обработки больших объемов данных в Hadoop Москва 2014 Лекция 5: MapReduce в Hadoop, алгоритмы
  • 2. Алгоритмы и паттерны MapReduce ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 3. WordCount • Описание проблемы – Есть коллекция документов – Каждый документ – это набор термов (слов) – Необходимо подсчитать кол-во вхождений каждого терма во всех документах • Дополнительно – Функция может быть произвольной – Напр., файл лога содержит время ответа. Необходимо подсчитать среднее время. ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 4. WordCount, baseline ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map (docid id, doc d) for all term t in doc d do Emit(term t, count 1) class Reducer method Reduce (term t, counts [c1, c2,...]) sum = 0 for all count c in [c1, c2,...] do sum = sum + c Emit(term t, count sum)
  • 5. WordCount, “In-mapper combining”, v.1 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map (docid id, doc d) H = new AssociativeArray for all term t in doc d do H{t} = H{t} + 1 for all term t in H do Emit(term t, count H{t}) • Минусы baseline – Много лишних счетчиков от Mapper – Агрегируем их для каждого документа
  • 6. WordCount, Combiner ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map (docid id, doc d) for all term t in doc d do Emit(term t, count 1) class Combiner method Combine (term t, [c1, c2,...]) sum = 0 for all count c in [c1, c2,...] do sum = sum + c Emit(term t, count sum) class Reducer method Reduce (term t, counts [c1, c2,...]) sum = 0 for all count c in [c1, c2,...] do sum = sum + c Emit(term t, count sum) • Для всех документов Mapper используем Combiner
  • 7. WordCount, “In-mapper combining”, v.2 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Initialize H = new AssociativeArray method Map (docid id, doc d) for all term t in doc d do H{t} = H{t} + 1 method Close for all term t in H do Emit(term t, count H{t})
  • 8. WordCount, “In-mapper combining”, v.2 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • “In-mapper combining” – “Заворачиваем” функционал комбайнера в mapper путем сохранения состояния между вызовами функции map() • Плюсы – Скорость • Почему это быстрее, чем стандартный Combiner? • Минусы – Требуется “ручное” управление памятью – Потенциальная возможность для багов связанных с сортировкой порядка элементов
  • 9. Среднее значение, v.1 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(string t, integer r) Emit(string t, integer r) class Reducer method Reduce(string t, integers [r1, r2, …]) sum = 0 cnt = 0 for all integers r in [r1, r2, …] do sum = sum + r cnt = cnt + 1 avg = sum / cnt Emit(string t, integer avg) Можно ли использовать Reducer в качестве Combiner?
  • 10. Среднее значение, v.2 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(string t, integer r) Emit(string t, integer r) class Combiner method Combine(string t, integers [r1, r2, …]) sum = 0 cnt = 0 for all integers r in [r1, r2, …] do sum = sum + r cnt = cnt + 1 Emit(string t, pair(sum, cnt)) class Reducer method Reduce(string t, pairs[(s1,c1),(s2,c2) …]) sum = 0 cnt = 0 for all pairs p in [(s1,c1),(s2,c2) …]) do sum = sum + p.s cnt = cnt + p.c avg = sum / cnt Emit(string t, integer avg) Почему это не работает?
  • 11. Среднее значение, v.3 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(string t, integer r) Emit(string t, pair (r,1)) class Combiner method Combine(string t pairs[(s1,c1),(s2,c2) …])) sum = 0 cnt = 0 for all pairs p in [(s1,c1),(s2,c2) …]) do sum = sum + p.s cnt = cnt + p.c Emit(string t, pair(sum, cnt)) class Reducer method Reduce(string t, pairs[(s1,c1),(s2,c2) …]) sum = 0 cnt = 0 for all pairs p in [(s1,c1),(s2,c2) …]) do sum = sum + p.s cnt = cnt + p.c avg = sum / cnt Emit(string t, pair (avg, cnt)) А так будет работать?
  • 12. Среднее значение, v.4 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Initialize S = new AssociativeArray C = new AssociativeArray method Map (string t, integer r) S{t} = S{t} + r C{t} = C{t} + 1 method Close for all term t in S do Emit(term t, pair(S{t}, C{t}))
  • 13. Distinct Values (Unique Items Counting) ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Описание проблемы – Есть множество записей – Каждая запись содержит поле F и производное число признаков категорий G = {G1, G2, …}. • Задача – Подсчитать общее число уникальных значений поля F для каждого подмножества записей для каждого значения в каждой категории Record 1: F=1, G={a, b} Record 2: F=2, G={a, d, e} Record 3: F=1, G={b} Record 4: F=3, G={a, b} Result: a -> 3 // F=1, F=2, F=3 b -> 2 // F=1, F=3 d -> 1 // F=2 e -> 1 // F=2
  • 14. Distinct Values, v.1 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Решение в две фазы (две задачи MapReduce) • Первая фаза – Mapper пишет все уникальные пары [G, F] – Reducer подсчитывает общее кол-во вхождений такой пары – Основная цель этой фазы – гарантировать уникальность значений F • Вторая фаза – Пары [G, F] группируются по G и затем считается общее кол-во элементов в каждой группе
  • 15. Distinct Values, v.1 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ // phase 1 class Mapper method Map(null, record [value f, categories [g1, g2,...]]) for all category g in [g1, g2,...] Emit(record [g, f], count 1) class Reducer method Reduce(record [g, f], counts [n1, n2, ...]) Emit(record [g, f], null ) // phase 2 class Mapper method Map(record [f, g], null) Emit(value g, count 1) class Reducer method Reduce(value g, counts [n1, n2,...]) Emit(value g, sum( [n1, n2,...] ) )
  • 16. Distinct Values, v.2 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Требуется только одна фаза MapReduce – Mapper • Пишет значение и категории – Reducer • Исключает дубликаты из списка категорий для каждого значения • Увеличивает счетчик для каждой категории • В конце Reducer пишет общее кол-во для каждой категории • Первая фаза – Данный подход не очень хорошо масштабируется – Подходит для небольшого числа категорий • Напр. парсинг действий пользователей из web-логов – Combiners позволят уменьшить кол-во дубликатов перед фазой Reduce
  • 17. Distinct Values, v.2 ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(null, record [value f, categories [g1, g2,...] ) for all category g in [g1, g2,...] Emit(value f, category g) class Reducer method Initialize H = new AssociativeArray : category -> count method Reduce(value f, categories [g1, g2,...]) [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] ) for all category g in [g1', g2',...] H{g} = H{g} + 1 method Close for all category g in H do Emit(category g, count H{g})
  • 18. Cross-Correlation ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Описание проблемы – Есть множество кортежей объектов – Для каждой возможной пары объектов посчитать число кортежей, где они встречаются вместе – Если число объектов N, то N*N объектов будет обработано • Применение – Анализ текстов • Кортежи – предложения, объекты – слова – Маркетинг • Покупатели, кто покупает одни товары, обычно покупают и другие товары • Если N*N небольшое и можно построить матрицу в памяти, то реализация довольно проста
  • 19. Cross-Correlation: Pairs ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Каждый Mapper принимает на вход кортеж – Генерит все пары соседних объектов – Для всех пар выполняет emit (a, b) → count • Reducer суммирует все count для всех пар – Combiners? class Mapper method Map(null, items [i1, i2,...] ) for all item i in [i1, i2,...] for all item j in [i1, i2,...] Emit(pair [i j], count 1) class Reducer method Reduce(pair [i j], counts [c1, c2,...]) s = sum([c1, c2,...]) Emit(pair[i j], count s)
  • 20. Cross-Correlation: Pairs ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Плюсы – Нет затрат по памяти – Простая реализация • Минусы – Множество пар надо отсортировать и распределить по редьюсерам (sort & shuffle) – Combiner вряд ли поможет (почему?)
  • 21. Cross-Correlation: Stripes ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Основная идея: – Группировать пары вместе в ассоциативный массив – Каждый Mapper принимает на вход последовательность • Генерит все пары рядом расположенных объектов • Для каждого объекта выполняет emit a → { b: countb, c: countc, d: countd … } – Reducer’ы выполняют поэлементное суммирование ассоциативных массивов (a, b) → 1 (a, c) → 2 (a, d) → 5 (a, e) → 3 (a, f) → 2 a → { b: 1, d: 5, e: 3 } a → { b: 1, c: 2, d: 2, f: 2 } a → { b: 2, c: 2, d: 7, e: 3, f: 2 } +
  • 22. Cross-Correlation: Stripes ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(null, items [i1, i2,...] ) for all item i in [i1, i2,...] H = new AssociativeArray : item -> counter for all item j in [i1, i2,...] H{j} = H{j} + 1 Emit(item i, stripe H) class Reducer method Reduce(item i, stripes [H1, H2,...]) H = new AssociativeArray : item -> counter H = merge-sum( [H1, H2,...] ) for all item j in H.keys() Emit(pair [i j], H{j})
  • 23. Cross-Correlation: Stripes ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Плюсы – Намного меньше операций сортировки и shuffle – Возможно, более эффективное использование Combiner • Минусы – Более сложная реализация – Более “тяжелые” объекты для передаче данных – Ограничения на размеры используемой памяти для ассоциативных массивов • Pairs vs Stripes – Обычно, подход со stripes быстрее, чем с pairs
  • 24. Реляционные паттерны MapReduce ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 25. Selection ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(rowkey key, value t) if t satisfies the predicate Emit(value t, null)
  • 26. Projection ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(rowkey key, value t) value g = project(t) // выбрать необходимые поля в g Emit(tuple g, null) // используем Reducer для устранения дубликатов class Reducer method Reduce(value t, array n) // n - массив из nulls Emit(value t, null)
  • 27. Union ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ // на вход подаются элементы из двух множеств A и B class Mapper method Map(rowkey key, value t) Emit(value t, null) class Reducer method Reduce(value t, array n) // n - массив из nulls Emit(value t, null)
  • 28. Intersection ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ // на вход подаются элементы из двух множеств A и B class Mapper method Map(rowkey key, value t) Emit(value t, null) class Reducer method Reduce(value t, array n) // n - массив из nulls if n.size() = 2 Emit(value t, null)
  • 29. Difference ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ // на вход подаются элементы из двух множеств A и B class Mapper method Map(rowkey key, value t) Emit(value t, string t.SetName) // t.SetName либо ‘A‘ либо ‘B' class Reducer // массив n может быть [‘A'], [‘B'], [‘A' ‘B‘] или [‘A', ‘B'] method Reduce(value t, array n) if n.size() = 1 and n[1] = ‘A' Emit(value t, null)
  • 30. Symmetric Difference ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ // на вход подаются элементы из двух множеств A и B class Mapper method Map(rowkey key, value t) Emit(value t, string t.SetName) // t.SetName либо ‘A‘ либо ‘B' class Reducer // массив n может быть [‘A'], [‘B'], [‘A' ‘B‘] или [‘A', ‘B'] method Reduce(value t, array n) if n.size() = 1 and (n[1] = ‘A‘ or n[1] = ‘B‘) Emit(value t, null)
  • 31. GroupBy и Aggregation ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(null, tuple [value GroupBy, value AggregateBy, value ...]) Emit(value GroupBy, value AggregateBy) class Reducer method Reduce(value GroupBy, [v1, v2,...]) // aggregate() : sum(), max(),... Emit(value GroupBy, aggregate( [v1, v2,...] ) )
  • 32. Repartition Join ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Reduce Join, Sort-Merge Join • Описание задачи – Объединить два множества A и B по ключу k • Решение – Mapper проходит по всем значениям каждого множества – Выбирает ключ k и маркирует каждое значени тегом, определяющим множество, откуда пришло значение – Reducer получает все значения, объединенные по одному ключу и размещает их по двум корзинам, соответствующим каждому множеству – После этого проходит по обеим корзинам и генерит значения из двух множеств с общим ключом
  • 33. Repartition Join ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Map(null, tuple [join_key k, value v1, value v2,...]) Emit(join_key k, tagged_tuple [set_name tag, values [v1, v2, ...] ] ) class Reducer method Reduce(join_key k, tagged_tuples [t1, t2,...]) H = new AssociativeArray : set_name -> values for all tagged_tuple t in [t1, t2,...] // separate values into 2 arrays H{t.tag}.add(t.values) for all values a in H{‘A'} // produce a cross-join of the two arrays for all values b in H{‘B'} Emit(null, [k a b] )
  • 34. Repartition Join ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Минусы – Mapper отправляет в output все данные, даже для тех ключей, которые есть только в одном множестве – Reducer должен хранить все значения для одного ключа в памяти • Нужно самостоятельно управлять памятью в случае, если данные в нее не помещаются
  • 35. Replicated Join • Map Join, Hash Join • Часто требуется объединять два множества разных размеров – маленькое и большое – Напр. список пользователей с логом их активности • Для этого можно использовать хеш-таблицу, куда загружать все элементы маленького множества, сгруппированных по ключу k • Затем, идти по элементам большого множества в Mapper и выполнять lookup- запрос к этой хеш-таблице ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 36. Replicated Join ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ class Mapper method Initialize H = new AssociativeArray : join_key -> tuple from A A = load() for all [ join_key k, tuple [a1, a2,...] ] in A H{k} = H{k}.append( [a1, a2,...] ) method Map(join_key k, tuple B) for all tuple a in H{k} Emit(null, tuple [k a B] )
  • 37. TF-IDF на MapReduce ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 38. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Term Frequency – Inverse Document Frequency – Используется при работе с текстом – В Information Retrieval
  • 39. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • TF (term frequency — частота слова) — отношение числа вхождения некоторого слова к общему количеству слов документа. – Таким образом, оценивается важность слова в пределах отдельного документа. где ni есть число вхождений слова в документ, а в знаменателе — общее число слов в данном документе. • IDF (inverse document frequency — обратная частота документа) — инверсия частоты, с которой некоторое слово встречается в документах коллекции. Где: – |D| — количество документов в корпусе; – — кол-во документов, в которых встречается ti (когда ni != 0).
  • 40. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Что нужно будет вычислить – Сколько раз слово T встречается в данном документе (tf) – Сколько документов, в котором встречается данное слово T (n) – Общее число документов (N)
  • 41. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Job 1: Частота слова в документе • Mapper – Input: (docname, contents) • Для каждого слова в документе надо сгенерить пару (word, docname) – Output: ((word, docname), 1) • Reducer – Суммирует число слов в документе – Outputs: ((word, docname), tf) • Combiner такой же как и Reducer
  • 42. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Job 2: Кол-во документов для слова • Mapper – Input: ((word, docname), tf) – Output: (word, (docname, tf, 1)) • Reducer – Суммирует единицы чтобы посчитать n – Output: ((word, docname), (tf,n))
  • 43. TF-IDF ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Job 3: Расчет TF-IDF • Mapper – Input: ((word, docname), (tf,n)) • Подразумевается, что N известно (его легко подсчитать) – Output: ((word, docname), (TF*IDF)) • Reducer – Не требуется
  • 44. TF-IDF, масштабируемость ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ • Несколько MapReduce задач позволяют реализовать сложные алгоритмы и улучшить мастабируемость – Думая в стиле MapReduce часто означает разделение комплексных задач на более мелкие • Стоит следить за тем, сколько используется ОЗУ, при работе с большим объемом данных – Каждый раз, когда необходимо хранить данные в памяти, это может стать потенциальной проблемой масштабируемости
  • 45. Ресурсы http://highlyscalable.wordpress.com/2012/02/01/mapreduce- patterns/ Data-Intensive Text Processing with MapReduce Jimmy Lin and Chris Dyer (Authors) (April, 2010) Chapter3: MapReduce Algorithm Design ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ
  • 46. Вопросы? ЛЕКЦИЯ 5: MAPREDUCE В HADOOP, АЛГОРИТМЫ