SlideShare a Scribd company logo
1 of 75
Download to read offline
MapReduce в Hadoop
Графы
Граф как структура данных
G = (V,E)
– V представляет собой множество вершин (nodes)
– E представляет собой множество ребер
(edges/links)
– Ребра и вершины могут содержать
дополнительную информацию
V = {1, 2, 3, 4, 5, 6}
E = {[1,2], [1,4], [1,6], [3,1], … }
W1,2 = 3, W1,4 = 2, W1,6 = 7, W3,1 = 8, …
2
1
4
5
3
6
3
2
7
8
4
1
2
1
5 1
Виды графов
Неориентированный Ориентированный
Несвязный Полный
Двудольный
Дерево
Графы на практике
Структура компьютеров и серверов сети
Социальные сети
Схема метро
Структура дорог
Задачи и проблемы на графах
Поиск кратчайшего пути
• Роутинг траффика
• Навигация маршрута
Поиск минимального остовного дерева
(Minimum Spanning Tree)
• Телекоммуникационные компании
Поиск максимального потока (Max Flow)
• Структура компьютеров и серверов Интернет
Алгоритмы
ссылочного
ранжирования
• PageRank
• HITS
Леонард Эйлер
Проблема семи мостов Кёнигсберга
Графы и MapReduce
• Вычисления на каждой вершине
• Обход графа
Ключевые вопросы:
– Как представить граф в MapReduce?
– Как обходить граф в MapReduce?
Матрица смежности
Граф представляется как матрица M размером n x n
– n = |V|
– Mij = 1 означает наличие ребра между i и j
1 2 3 4
1 0 1 0 1
2 1 0 1 1
3 1 0 0 0
4 1 0 1 0
1
2
3
4
Матрица смежности
Плюсы
– Удобство математических вычислений
– Перемещение по строкам и колонкам
соответствует переходу по входящим и
исходящим ссылкам
Минусы
– Матрица разреженная, множество лишних
нулей
– Расходуется много лишнего места
1 2 3 4
1 0 1 0 1
2 1 0 1 1
3 1 0 0 0
4 1 0 1 0
Списки смежности
Берем матрицу смежности и убираем все нули
1 2 3 4
1 0 1 0 1
2 1 0 1 1
3 1 0 0 0
4 1 0 1 0
1: 2, 4
2: 1, 3, 4
3: 1
4: 1, 3
Списки смежности
• Плюсы
– Намного более компактная реализация
– Легко найти все исходящие ссылки для
вершины
• Минусы
– Намного сложнее подсчитать входящие ссылки
Поиск кратчайшего пути в графе
Алгоритм Дейкстры
0




10
5
2 3
2
1
9
7
4 6
0
10
5


10
5
2 3
2
1
9
7
4 6
0
8
5
14
7
10
5
2 3
2
1
9
7
4 6
0
8
5
13
7
10
5
2 3
2
1
9
7
4 6
0
8
5
9
7
10
5
2 3
2
1
9
7
4 6
0
8
5
9
7
10
5
2 3
2
1
9
7
4 6
Алгоритм Дейкстры
Dijkstra(V, s, w)
for all vertex v ∈ V do
d[v] ← ∞
d[s] ← 0
Q ← {V }
while Q != ∅ do
u ←ExtractMin(Q)
for all vertex v ∈ u.AdjacencyList do
if d[v] > d[u] + w(u, v) then
d[v] ← d[u] + w(u, v)
Поиск кратчайшего пути
• Пусть веса ребер равны 1
• Решение по индукции:
– DISTANCETO(s) = 0
– DISTANCETO(s->p) = 1
– DISTANCETO(n) = 1 + min(DISTANCETO(m), m  M)
s
m3
m2
m1
n
…
…
…
d1
d2
d3
Параллельный поиск в ширину (BFS)
n0
n3
n2
n1 n7
n6
n5
n4
n9
n8
Breadth First Search: представление данных
– Key: вершина n
– Value: d (расстояние от начала), adjacency list (вершины,
доступные из n)
– Инициализация: для всех вершин, кроме начальной, d = 
1 –> [0, {2, 3, 4}]
2 -> [, {5, 6} ]
3 -> [, {} ]
4 -> [, {7, 8} ]
5 -> [, {9, 10} ]
…
Breadth First Search: Mapper
mapper(key, value):
emit(key, value)
m  value.adjacency_list: emit (m, value.d + 1)
Breadth First Search: Mapper
1 –> [0, {2, 3, 4}]
1 –> [0, {2, 3, 4}]
2 -> [1, {} ]
3 -> [1, {} ]
4 -> [1, {} ]
2 -> [, {5, 6} ]
2 –> [, {5, 6}]
5 -> [, {} ]
6 -> [, {} ]
Mapper 1
Mapper 2
Breadth First Search: Reducer
• Sort/Shuffle
– Сгруппировать расстояния по достижимым вершинам
• Reducer:
– Выбрать путь с минимальным расстоянием для каждой
достижимой вершины
– Сохранить структуру графа
Breadth First Search: Reducer
2 –> {[1, {} ], [, {5, 6}]}
2 –> [1, {5, 6} ]
Reduce In:
Reduce Out:
class Mapper
method Map(nid n, node N)
d ← N.Distance
Emit(nid n,N) // Pass along graph structure
for all nodeid m ∈ N.AdjacencyList do
Emit(nid m, d + 1) // Emit distances to
reachable nodes
BFS: псевдокод
class Reducer
method Reduce(nid m, [d1, d2, . . .])
dmin ← ∞
M ← ∅
for all d ∈ counts [d1, d2, . . .] do
if IsNode(d) then
M ← d // Recover graph structure
else if d < dmin then
dmin ← d
M.Distance ← dmin // Update shortest distance
Emit(nid m, node M)
BFS: псевдокод
1 –> [0, {2, 3, 4}]
2 -> [, {5, 6} ]
3 -> [, {} ]
4 -> [, {7, 8} ]
5 -> [, {9, 10} ]
…
1 –> [0, {2, 3, 4}]
2 -> [1, {5, 6} ]
3 -> [1, {} ]
4 -> [1, {7, 8} ]
5 -> [, {9, 10} ]
…
1 –> [0, {2, 3, 4}]
2 -> [1, {5, 6} ]
3 -> [1, {} ]
4 -> [1, {7, 8} ]
5 -> [2, {9, 10} ]
…
1 –> [0, {2, 3, 4}]
2 -> [1, {5, 6} ]
3 -> [1, {} ]
4 -> [1, {7, 8} ]
5 -> [2, {9, 10} ]
…
Input Iteration 1
Iteration 2Result
…
Breadth First Search: Итерации
• Каждая итерация задачи MapReduce смещает границу
продвижения по графу (frontier) на один “hop”
– Последующие операции включают все больше и больше
посещенных вершин, т.к. граница (frontier) расширяется
– Множество итераций требуется для обхода всего графа
• Сохранение структуры графа
– Проблема: что делать со списком смежных вершин
(adjacency list)?
– Решение: Mapper также пишет (n, adjacency list)
BFS: критерий завершения
• Как много итераций нужно для завершения
параллельного BFS?
• Когда первый раз посетили искомую вершину,
значит найден самый короткий путь
• Равно диаметру графа
• Практическая реализация
– Внешняя программа-драйвер для проверки оставшихся вершин с
дистанцией 
– Можно использовать счетчики из Hadoop MapReduce
BFS vs Дейкстра
• Алгоритм Дейкстры более эффективен
– На каждом шаге используются вершины только из пути с
минимальным весом
– Нужна дополнительная структура данных (priority queue)
• MapReduce обходит все пути графа параллельно
– Много лишней работы (brute-force подход)
– Полезная часть выполняется только на текущей границе
обхода
BFS: Weighted Edges
• Добавим положительный вес каждому ребру
• Простая доработка: добавим вес w для каждого
ребра в список смежных вершин
– В mapper, emit (m, d + wp) вместо (m, d + 1) для каждой
вершины m
BFS Weighted: критерий завершения
• Как много итераций нужно для завершения
параллельного BFS (взвешенный граф)?
• Когда первый раз посетили искомую вершину,
значит найден самый короткий путь
• И это неверно!
BFS Weighted: сложности
s
p
q
r
search frontier
10
n1
n2
n3
n4
n5
n6 n7
n8
n9
1
1
1
1
1
1
1
1
BFS Weighted: критерий завершения
• В худшем случае: N – 1
• В реальном мире ~= диаметру графа
• Практическая реализация
– Итерации завершаются, когда минимальный путь у
каждой вершины больше не меняется
– Для этого можно также использовать счетчики в
MapReduce
PageRank
PageRank
• Определяет важность страницы
• Характеризует кол-во времени, которое
пользователь провел на данной странице
• Модель блуждающего веб-серфера
– Пользователь начинает серфинг на случайной веб-странице
– Пользователь произвольно кликает по ссылкам, тем самым
перемещаясь от страницы к странице
X
t1
t2
tn
…
Вычисление PageRank
• Свойства PageRank’а
– Может быть рассчитан итеративно
– Локальный эффект на каждой итерации
• Набросок алгоритма
– Начать с некоторыми заданными значения PRi
– Каждая страница распределяет PRi “кредит” всем страниц,
на которые с нее есть ссылки
– Каждая страница добавляет весь полученный “кредит” от
страниц, которые на нее ссылаются, для подсчета PRi+1
– Продолжить итерации пока значения не сойдутся
Упрощения для PageRank
Рассмотрим простой случай
– Нет фактора случайного перехода (random jump)
– Нет “подвисших” вершин
n1 (0.2)
n4 (0.2)
n3 (0.2)
n5 (0.2)
n2 (0.2)
0.1
0.1
0.2 0.2
0.1
0.1
0.066 0.066
0.066
n1 (0.066)
n4 (0.3)
n3 (0.166)
n5 (0.3)
n2 (0.166)
Iteration 1
n1 (0.066)
n4 (0.3)
n3 (0.166)
n5 (0.3)
n2 (0.166)
0.033
0.033
0.3 0.166
0.083
0.083
0.1 0.1
0.1
n1 (0.1)
n4 (0.2)
n3 (0.183)
n5 (0.383)
n2 (0.133)
Iteration 2
n5 [n1, n2, n3]n1 [n2, n4] n2 [n3, n5] n3 [n4] n4 [n5]
n2 n4 n3 n5 n1 n2 n3n4 n5
n2 n4n3 n5n1 n2 n3 n4 n5
n5 [n1, n2, n3]n1 [n2, n4] n2 [n3, n5] n3 [n4] n4 [n5]
Map
Reduce
class Mapper
method Map(nid n, node N)
p ← N.PageRank/|N.AdjacencyList|
Emit(nid n,N)
for all nodeid m ∈ N.AdjacencyList do
Emit(nid m, p)
PageRank: Mapper
class Reducer
method Reduce(nid m, [p1, p2, . . .])
M ← ∅
for all p ∈ counts [p1, p2, . . .] do
if IsNode(p) then
M ← p
else
s ← s + p
M.PageRank ← s
Emit(nid m, node M)
PageRank: Reducer
Полный PageRank
• Обработка “подвешенных” вершин
• Случайный переход (random jump)
Сходимость PageRank
• Продолжать итерации пока значения
PageRank не перестанут изменяться
• Продолжать итерации пока отношения
PageRank не перестанут изменяться
• Фиксированное число итераций
Проблемы MapReduce на графах
• Многословность Java
• Время запуска таска в Hadoop
• Медленные или зависшие таски
• Бесполезность фазы shuffle для графов
• Проверки на каждой итерации
• Итеративные алгоритмы на MapReduce
неэффективны!
MapReduce на графах, проблемы
In-Mapper Combining
• Использование комбайнеров
– Агрегирует данные на
mapper
– Но, промежуточные данные
все равно обрабатываются
• In-mapper combining
– Агрегируем сообщения в
буффере
– Но, требуется управление
памятью
setup
map
cleanup
buffer
Emit all key-
value pairs
at once
Улучшение партиционирования
• По-умолчанию: hash partitioning
• Наблюдение: много графов имеют локальную
структуру
– Например, коммьюнити в соц.сетях
– Улучшение локальной агрегации
• Но, партиционирование довольно сложно!
– Иногда простые эвристики помогают
– Для веб-графа: использовать партиционирование на
основе домена от URL
Schimmy Design Pattern
• Обычно два набора данных:
– Messages (актуальные вычисления)
– Graph structure (структура обрабатываемого графа)
• Schimmy: выполнять shuffle только для messages
S TS1 T1 S2 T2 S3 T3
ReducerReducerReducer
S TS1 T1 S2 T2 S3 T3
intermediate data
(messages)
intermediate data
(messages)
intermediate data
(messages)
from HDFS
(graph structure)
from HDFS
(graph structure)
from HDFS
(graph structure)
Обе части (S и T) консистентно партиционированы и сортированы по join key
Эксперимент
• Cluster setup:
– 10 workers, each 2 cores (3.2 GHz Xeon), 4GB RAM, 367 GB disk
– Hadoop 0.20.0 on RHELS 5.3
• Dataset:
– Первый сегмент английского текста из коллекции ClueWeb09
– 50.2m web pages (1.53 TB uncompressed, 247 GB compressed)
– Extracted webgraph: 1.4 Млрд ссылок, 7.0 GB
– Dataset сортирован в порядке краулинга
• Setup:
– Измерялось время выполнения по каждой итерации (5 итераций)
– 100 партиций
“Best Practices”
+18%
1.4b
674m
+18%
-15%
1.4b
674m
+18%
-15%
-60%
1.4b
674m
86m
+18%
-15%
-60%
-69%
1.4b
674m
86m

More Related Content

What's hot

Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Spark: нетипичные примеры использования
Spark:  нетипичные примеры использованияSpark:  нетипичные примеры использования
Spark: нетипичные примеры использованияfaithlessfriend
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIIlya Chesnokov
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
 
Apache Spark — Егор Пахомов
Apache Spark — Егор ПахомовApache Spark — Егор Пахомов
Apache Spark — Егор ПахомовYandex
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данныхHacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данныхAnastasia Lubennikova
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQLAnastasia Lubennikova
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.Anastasia Lubennikova
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentationVlad Orlov
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?Ivan Tsyganov
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Ivan Muratov
 

What's hot (20)

Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Spark: нетипичные примеры использования
Spark:  нетипичные примеры использованияSpark:  нетипичные примеры использования
Spark: нетипичные примеры использования
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
Apache Spark — Егор Пахомов
Apache Spark — Егор ПахомовApache Spark — Егор Пахомов
Apache Spark — Егор Пахомов
 
Пакет purrr
Пакет purrrПакет purrr
Пакет purrr
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данныхHacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQL
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.
 
Hadoop presentation
Hadoop presentationHadoop presentation
Hadoop presentation
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 

Similar to 08 - Hadoop. Алгоритмы на графах в MapReduce

Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шагиAnton Gorokhov
 
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
 
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...А. Зиновьев "Big data algorithms and data structures for large scale graphs",...
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...it-people
 
Параллельные и распределенные вычисления
Параллельные и распределенные вычисленияПараллельные и распределенные вычисления
Параллельные и распределенные вычисленияMATLAB
 
алексей романенко
алексей романенкоалексей романенко
алексей романенкоkuchinskaya
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Uniting Data JavaOne2013
Uniting Data JavaOne2013Uniting Data JavaOne2013
Uniting Data JavaOne2013Dmitri Shiryaev
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationAnton Gorokhov
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsevamariiagure
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEАртём Кудзев
 
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...rit2011
 
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...Alexey Voropaev
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanovyaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Yandex
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 

Similar to 08 - Hadoop. Алгоритмы на графах в MapReduce (20)

Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
 
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
 
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...А. Зиновьев "Big data algorithms and data structures for large scale graphs",...
А. Зиновьев "Big data algorithms and data structures for large scale graphs",...
 
Параллельные и распределенные вычисления
Параллельные и распределенные вычисленияПараллельные и распределенные вычисления
Параллельные и распределенные вычисления
 
Map reduce
Map reduceMap reduce
Map reduce
 
алексей романенко
алексей романенкоалексей романенко
алексей романенко
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Uniting Data JavaOne2013
Uniting Data JavaOne2013Uniting Data JavaOne2013
Uniting Data JavaOne2013
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanations
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
 
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
 
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...
RIT++: Hadoop Streaming: простой путь к масштабированию приложений обработки ...
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 

More from Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

08 - Hadoop. Алгоритмы на графах в MapReduce

  • 2. Граф как структура данных G = (V,E) – V представляет собой множество вершин (nodes) – E представляет собой множество ребер (edges/links) – Ребра и вершины могут содержать дополнительную информацию
  • 3. V = {1, 2, 3, 4, 5, 6} E = {[1,2], [1,4], [1,6], [3,1], … } W1,2 = 3, W1,4 = 2, W1,6 = 7, W3,1 = 8, … 2 1 4 5 3 6 3 2 7 8 4 1 2 1 5 1
  • 10. Структура компьютеров и серверов сети
  • 14. Задачи и проблемы на графах
  • 15. Поиск кратчайшего пути • Роутинг траффика • Навигация маршрута
  • 16. Поиск минимального остовного дерева (Minimum Spanning Tree) • Телекоммуникационные компании
  • 17. Поиск максимального потока (Max Flow) • Структура компьютеров и серверов Интернет
  • 19. Леонард Эйлер Проблема семи мостов Кёнигсберга
  • 21. • Вычисления на каждой вершине • Обход графа
  • 22. Ключевые вопросы: – Как представить граф в MapReduce? – Как обходить граф в MapReduce?
  • 23. Матрица смежности Граф представляется как матрица M размером n x n – n = |V| – Mij = 1 означает наличие ребра между i и j 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 1 0 0 0 4 1 0 1 0 1 2 3 4
  • 24. Матрица смежности Плюсы – Удобство математических вычислений – Перемещение по строкам и колонкам соответствует переходу по входящим и исходящим ссылкам Минусы – Матрица разреженная, множество лишних нулей – Расходуется много лишнего места 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 1 0 0 0 4 1 0 1 0
  • 25. Списки смежности Берем матрицу смежности и убираем все нули 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 1 0 0 0 4 1 0 1 0 1: 2, 4 2: 1, 3, 4 3: 1 4: 1, 3
  • 26. Списки смежности • Плюсы – Намного более компактная реализация – Легко найти все исходящие ссылки для вершины • Минусы – Намного сложнее подсчитать входящие ссылки
  • 34. Алгоритм Дейкстры Dijkstra(V, s, w) for all vertex v ∈ V do d[v] ← ∞ d[s] ← 0 Q ← {V } while Q != ∅ do u ←ExtractMin(Q) for all vertex v ∈ u.AdjacencyList do if d[v] > d[u] + w(u, v) then d[v] ← d[u] + w(u, v)
  • 35. Поиск кратчайшего пути • Пусть веса ребер равны 1 • Решение по индукции: – DISTANCETO(s) = 0 – DISTANCETO(s->p) = 1 – DISTANCETO(n) = 1 + min(DISTANCETO(m), m  M) s m3 m2 m1 n … … … d1 d2 d3
  • 36. Параллельный поиск в ширину (BFS) n0 n3 n2 n1 n7 n6 n5 n4 n9 n8
  • 37. Breadth First Search: представление данных – Key: вершина n – Value: d (расстояние от начала), adjacency list (вершины, доступные из n) – Инициализация: для всех вершин, кроме начальной, d =  1 –> [0, {2, 3, 4}] 2 -> [, {5, 6} ] 3 -> [, {} ] 4 -> [, {7, 8} ] 5 -> [, {9, 10} ] …
  • 38. Breadth First Search: Mapper mapper(key, value): emit(key, value) m  value.adjacency_list: emit (m, value.d + 1)
  • 39. Breadth First Search: Mapper 1 –> [0, {2, 3, 4}] 1 –> [0, {2, 3, 4}] 2 -> [1, {} ] 3 -> [1, {} ] 4 -> [1, {} ] 2 -> [, {5, 6} ] 2 –> [, {5, 6}] 5 -> [, {} ] 6 -> [, {} ] Mapper 1 Mapper 2
  • 40. Breadth First Search: Reducer • Sort/Shuffle – Сгруппировать расстояния по достижимым вершинам • Reducer: – Выбрать путь с минимальным расстоянием для каждой достижимой вершины – Сохранить структуру графа
  • 41. Breadth First Search: Reducer 2 –> {[1, {} ], [, {5, 6}]} 2 –> [1, {5, 6} ] Reduce In: Reduce Out:
  • 42. class Mapper method Map(nid n, node N) d ← N.Distance Emit(nid n,N) // Pass along graph structure for all nodeid m ∈ N.AdjacencyList do Emit(nid m, d + 1) // Emit distances to reachable nodes BFS: псевдокод
  • 43. class Reducer method Reduce(nid m, [d1, d2, . . .]) dmin ← ∞ M ← ∅ for all d ∈ counts [d1, d2, . . .] do if IsNode(d) then M ← d // Recover graph structure else if d < dmin then dmin ← d M.Distance ← dmin // Update shortest distance Emit(nid m, node M) BFS: псевдокод
  • 44. 1 –> [0, {2, 3, 4}] 2 -> [, {5, 6} ] 3 -> [, {} ] 4 -> [, {7, 8} ] 5 -> [, {9, 10} ] … 1 –> [0, {2, 3, 4}] 2 -> [1, {5, 6} ] 3 -> [1, {} ] 4 -> [1, {7, 8} ] 5 -> [, {9, 10} ] … 1 –> [0, {2, 3, 4}] 2 -> [1, {5, 6} ] 3 -> [1, {} ] 4 -> [1, {7, 8} ] 5 -> [2, {9, 10} ] … 1 –> [0, {2, 3, 4}] 2 -> [1, {5, 6} ] 3 -> [1, {} ] 4 -> [1, {7, 8} ] 5 -> [2, {9, 10} ] … Input Iteration 1 Iteration 2Result …
  • 45. Breadth First Search: Итерации • Каждая итерация задачи MapReduce смещает границу продвижения по графу (frontier) на один “hop” – Последующие операции включают все больше и больше посещенных вершин, т.к. граница (frontier) расширяется – Множество итераций требуется для обхода всего графа • Сохранение структуры графа – Проблема: что делать со списком смежных вершин (adjacency list)? – Решение: Mapper также пишет (n, adjacency list)
  • 46. BFS: критерий завершения • Как много итераций нужно для завершения параллельного BFS? • Когда первый раз посетили искомую вершину, значит найден самый короткий путь • Равно диаметру графа • Практическая реализация – Внешняя программа-драйвер для проверки оставшихся вершин с дистанцией  – Можно использовать счетчики из Hadoop MapReduce
  • 47. BFS vs Дейкстра • Алгоритм Дейкстры более эффективен – На каждом шаге используются вершины только из пути с минимальным весом – Нужна дополнительная структура данных (priority queue) • MapReduce обходит все пути графа параллельно – Много лишней работы (brute-force подход) – Полезная часть выполняется только на текущей границе обхода
  • 48. BFS: Weighted Edges • Добавим положительный вес каждому ребру • Простая доработка: добавим вес w для каждого ребра в список смежных вершин – В mapper, emit (m, d + wp) вместо (m, d + 1) для каждой вершины m
  • 49. BFS Weighted: критерий завершения • Как много итераций нужно для завершения параллельного BFS (взвешенный граф)? • Когда первый раз посетили искомую вершину, значит найден самый короткий путь • И это неверно!
  • 50. BFS Weighted: сложности s p q r search frontier 10 n1 n2 n3 n4 n5 n6 n7 n8 n9 1 1 1 1 1 1 1 1
  • 51. BFS Weighted: критерий завершения • В худшем случае: N – 1 • В реальном мире ~= диаметру графа • Практическая реализация – Итерации завершаются, когда минимальный путь у каждой вершины больше не меняется – Для этого можно также использовать счетчики в MapReduce
  • 53. PageRank • Определяет важность страницы • Характеризует кол-во времени, которое пользователь провел на данной странице • Модель блуждающего веб-серфера – Пользователь начинает серфинг на случайной веб-странице – Пользователь произвольно кликает по ссылкам, тем самым перемещаясь от страницы к странице
  • 55. Вычисление PageRank • Свойства PageRank’а – Может быть рассчитан итеративно – Локальный эффект на каждой итерации • Набросок алгоритма – Начать с некоторыми заданными значения PRi – Каждая страница распределяет PRi “кредит” всем страниц, на которые с нее есть ссылки – Каждая страница добавляет весь полученный “кредит” от страниц, которые на нее ссылаются, для подсчета PRi+1 – Продолжить итерации пока значения не сойдутся
  • 56. Упрощения для PageRank Рассмотрим простой случай – Нет фактора случайного перехода (random jump) – Нет “подвисших” вершин
  • 57. n1 (0.2) n4 (0.2) n3 (0.2) n5 (0.2) n2 (0.2) 0.1 0.1 0.2 0.2 0.1 0.1 0.066 0.066 0.066 n1 (0.066) n4 (0.3) n3 (0.166) n5 (0.3) n2 (0.166) Iteration 1
  • 58. n1 (0.066) n4 (0.3) n3 (0.166) n5 (0.3) n2 (0.166) 0.033 0.033 0.3 0.166 0.083 0.083 0.1 0.1 0.1 n1 (0.1) n4 (0.2) n3 (0.183) n5 (0.383) n2 (0.133) Iteration 2
  • 59. n5 [n1, n2, n3]n1 [n2, n4] n2 [n3, n5] n3 [n4] n4 [n5] n2 n4 n3 n5 n1 n2 n3n4 n5 n2 n4n3 n5n1 n2 n3 n4 n5 n5 [n1, n2, n3]n1 [n2, n4] n2 [n3, n5] n3 [n4] n4 [n5] Map Reduce
  • 60. class Mapper method Map(nid n, node N) p ← N.PageRank/|N.AdjacencyList| Emit(nid n,N) for all nodeid m ∈ N.AdjacencyList do Emit(nid m, p) PageRank: Mapper
  • 61. class Reducer method Reduce(nid m, [p1, p2, . . .]) M ← ∅ for all p ∈ counts [p1, p2, . . .] do if IsNode(p) then M ← p else s ← s + p M.PageRank ← s Emit(nid m, node M) PageRank: Reducer
  • 62. Полный PageRank • Обработка “подвешенных” вершин • Случайный переход (random jump)
  • 63. Сходимость PageRank • Продолжать итерации пока значения PageRank не перестанут изменяться • Продолжать итерации пока отношения PageRank не перестанут изменяться • Фиксированное число итераций
  • 65. • Многословность Java • Время запуска таска в Hadoop • Медленные или зависшие таски • Бесполезность фазы shuffle для графов • Проверки на каждой итерации • Итеративные алгоритмы на MapReduce неэффективны! MapReduce на графах, проблемы
  • 66. In-Mapper Combining • Использование комбайнеров – Агрегирует данные на mapper – Но, промежуточные данные все равно обрабатываются • In-mapper combining – Агрегируем сообщения в буффере – Но, требуется управление памятью setup map cleanup buffer Emit all key- value pairs at once
  • 67. Улучшение партиционирования • По-умолчанию: hash partitioning • Наблюдение: много графов имеют локальную структуру – Например, коммьюнити в соц.сетях – Улучшение локальной агрегации • Но, партиционирование довольно сложно! – Иногда простые эвристики помогают – Для веб-графа: использовать партиционирование на основе домена от URL
  • 68. Schimmy Design Pattern • Обычно два набора данных: – Messages (актуальные вычисления) – Graph structure (структура обрабатываемого графа) • Schimmy: выполнять shuffle только для messages S TS1 T1 S2 T2 S3 T3
  • 69. ReducerReducerReducer S TS1 T1 S2 T2 S3 T3 intermediate data (messages) intermediate data (messages) intermediate data (messages) from HDFS (graph structure) from HDFS (graph structure) from HDFS (graph structure) Обе части (S и T) консистентно партиционированы и сортированы по join key
  • 70. Эксперимент • Cluster setup: – 10 workers, each 2 cores (3.2 GHz Xeon), 4GB RAM, 367 GB disk – Hadoop 0.20.0 on RHELS 5.3 • Dataset: – Первый сегмент английского текста из коллекции ClueWeb09 – 50.2m web pages (1.53 TB uncompressed, 247 GB compressed) – Extracted webgraph: 1.4 Млрд ссылок, 7.0 GB – Dataset сортирован в порядке краулинга • Setup: – Измерялось время выполнения по каждой итерации (5 итераций) – 100 партиций