45
Big Data’14 Лекция IV: PageRank и распределенные вычисления на графах Дмитрий Барашев [email protected] Computer Science Center 3 марта 2014

Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Big Data’14Лекция IV: PageRank и распределенные

вычисления на графах

Дмитрий Барашев[email protected]

Computer Science Center

3 марта 2014

Page 2: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Этот материал распространяется под лицензией

Creative Commons ”Attribution - Share Alike” 3.0http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru

сверстано в онлайн LATEX редакторе

P

a

peeriapapeeria.com

Page 3: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Сегодня в программе

PageRank

PageRank и MapReduce

Pregel

Page 4: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Разминка

Упорядочите слова грека, рак, река, видит изследующего корпуса документов в порядкеубывания их IDF:1. ехал грека через река2. видит грека в река рак3. сунул грека рука в река4. рак за рука грека цап

Page 5: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Сегодня в программе

PageRank

PageRank и MapReduce

Pregel

Page 6: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

«Важность» документа

▶ Не все документы одинаково полезны▶ Главная страница CNN или Wikipedia имеютбольшой вес

▶ А безвестный блог в ЖЖ без читателей – чутокпоменьше

▶ Важность документа/сайта определяетсямногими сигналами

▶ поведением пользователя на страницерезультатов

▶ статистикой, собираемой службой аналитики▶ ссылками на документ

Page 7: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Подсчет ссылок

▶ На любой документ можно сослаться, но наважные будет больше ссылок

▶ 100500 леммингов не могут ошибаться!▶ Больше ссылок – выше ранг▶ Это уже давно практикуется в научныхпубликациях

Page 8: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Но SEOшник не дремлет

Page 9: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Случайные блуждания

▶ Мартышка с мышкой в руках случайно щелкаетпо ссылкам на странице

▶ Если на странице ссылок нет, браузер самтелепортирует мартышку на случайнуюстраницу

▶ Даже если ссылки есть, с некоторойвероятностью происходит телепорт

PageRank страницы – вероятность того чтомартышка на ней окажется

Page 10: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Случайные блуждания

▶ Мартышка с мышкой в руках случайно щелкаетпо ссылкам на странице

▶ Если на странице ссылок нет, браузер самтелепортирует мартышку на случайнуюстраницу

▶ Даже если ссылки есть, с некоторойвероятностью происходит телепорт

PageRank страницы – вероятность того чтомартышка на ней окажется

Page 11: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Ряд допущений

▶ N страниц▶ Вероятность перейти по ссылке равна

(1− α) 1|outlinks|

▶ Вероятность совершить телепорт на любуюстраницу равна α/N

▶ Для тупиковых страниц α = 1

▶ Для остальных обычно α = 0.15

Page 12: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Как же считать

▶ PageRank страницы зависит от PageRankссылающихся страниц

Page 13: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Математическая модель

▶ Рассмотрим матрицу

P = (1− α)A+α

N J+ (1− α)

N dTe

▶ Первое слагаемое: переход по ссылкам. A -матрица вероятностей переходов по ссылкам.Aij =

1|outlinksi|

если есть ссылка со страницы i на j.

0.85×

p1 p2 p3 p4

p1 0 0.5 0.5 0p2 0.5 0 0.5 0p3 0 0 0 1p4 0 0 0 0

Page 14: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Математическая модель

▶ Рассмотрим матрицу

P = (1− α)A+α

N J+ (1− α)

N dTe

▶ Второе слагаемое: телепортация из любойстраницы. J - матрица единиц

0.15

N ×

p1 p2 p3 p4

p1 1 1 1 1p2 1 1 1 1p3 1 1 1 1p4 1 1 1 1

Page 15: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Математическая модель

▶ Рассмотрим матрицу

P = (1− α)A+α

N J+ (1− α)

N dTe

▶ Третье слагаемое: телепортация из тупиковойстраницы. dT - вектор-столбец тупиковыхстраниц, e - вектор единиц

0.85

N ×

0001

×[1 1 1 1

]=

0.85

N ×

p1 p2 p3 p4

p1 0 0 0 0p2 0 0 0 0p3 0 0 0 0p4 1 1 1 1

Page 16: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Математическая модель

▶ Сумма значений в каждой строке P равна 1▶ P – стохастическая матрица, представляющаяматрицу переходных вероятностей цепиМаркова

▶ Если вектор −→x0 - начальное распределениевероятностей пребывания на той или инойстранице то −→x1 = −→x0 ∗ P распределение после 1-гошага, −→x2 = −→x0 ∗ P2 – после 2-го, −→xk =

−→x0 ∗ Pk – послеk-го

▶ Известно что существует равновесноераспределение −→π являющееся собственнымвектором матрицы P: −→π P = λ−→π

▶ Собственный вектор можно вычислитьитеративно

Page 17: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Сегодня в программе

PageRank

PageRank и MapReduce

Pregel

Page 18: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Подсчет значения PageRank

▶ На каждой итерации считается новый PRстраницы j как сумма подарков от всехостальных страниц

▶ Подарки персональные и общие

Page 19: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Персональные подарки

▶ Если есть ссылка i → j то подарок от i равен

PRi × (1− α)× Aij

Page 20: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Общие подарки

▶ От каждой страницы i подарок в размере

PRi ×α

N

ΣiPRi ×α

N =α

N▶ От каждой тупиковой страницы i подарок вразмере

PRi ×(1− α)

N

Page 21: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Алгоритм вычисления

▶ Посчитать сумму ΣiPRi для тупиковых страниц▶ Каждая страница посылает персональныеподарки адресатам

▶ Страницы суммируют персональные подарки иобщие

Page 22: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Реализация на Map-Reduce

1 def mapfn(k, v):2 docid, rank, outlinks = v.split()[:3];3 yield docid, 04 if outlinks != ”==”:5 dst_docids = outlinks.split(’,’)6 for d in dst_docids:7 yield d, float(rank) / len(dst_docids)8 else:9 for d in range(1, 5):

10 yield str(d), float(rank)/411

12 def reducefn(k, vs):13 return 0.85*sum(vs) + 0.15/4

Page 23: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Map-Reduce прекрасен, но

▶ каждая итерация делает одно и то же▶ а процессы надо запускать▶ за локальностью данных следить тяжело

Page 24: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Существующие решения

▶ Использовать библиотеки для одной машины▶ не масштабируется

▶ Использовать библиотеку для параллельнойобработки

▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи

▶ лень▶ Как насчет SQL?1 SELECT dst_docid, 0.85 * SUM(p.rank / p.outlinks) +

0.15/(SELECT COUNT(*) FROM Pages) as rank2 FROM Pages p JOIN Links l ON (l.src_docid = p.id)3 GROUP BY l.dst_docid

▶ дороговато может выйти

Page 25: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Существующие решения

▶ Использовать библиотеки для одной машины▶ не масштабируется

▶ Использовать библиотеку для параллельнойобработки

▶ их еще надо поискать

▶ Написать свою инфраструктуру для своей задачи▶ лень

▶ Как насчет SQL?1 SELECT dst_docid, 0.85 * SUM(p.rank / p.outlinks) +

0.15/(SELECT COUNT(*) FROM Pages) as rank2 FROM Pages p JOIN Links l ON (l.src_docid = p.id)3 GROUP BY l.dst_docid

▶ дороговато может выйти

Page 26: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Существующие решения

▶ Использовать библиотеки для одной машины▶ не масштабируется

▶ Использовать библиотеку для параллельнойобработки

▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи

▶ лень

▶ Как насчет SQL?1 SELECT dst_docid, 0.85 * SUM(p.rank / p.outlinks) +

0.15/(SELECT COUNT(*) FROM Pages) as rank2 FROM Pages p JOIN Links l ON (l.src_docid = p.id)3 GROUP BY l.dst_docid

▶ дороговато может выйти

Page 27: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Существующие решения

▶ Использовать библиотеки для одной машины▶ не масштабируется

▶ Использовать библиотеку для параллельнойобработки

▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи

▶ лень▶ Как насчет SQL?1 SELECT dst_docid, 0.85 * SUM(p.rank / p.outlinks) +

0.15/(SELECT COUNT(*) FROM Pages) as rank2 FROM Pages p JOIN Links l ON (l.src_docid = p.id)3 GROUP BY l.dst_docid

▶ дороговато может выйти

Page 28: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

хочется Map-Reduce заточенный награфовые алгоритмы

Page 29: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Сегодня в программе

PageRank

PageRank и MapReduce

Pregel

Page 30: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Pregel – это река

Page 31: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Инфраструктура для алгоритмов набольших графах

▶ Идея та же: программист пишет код, которыйчто-то вычисляет в вершине и посылаетсообщения другим вершинам

▶ Инфраструктура заботится о координации,масштабировании, пересылке сообщений,восстановлении после сбоев

▶ Процесс итеративный▶ Надо обработать быстрее или больше данных –добавляем машин

Page 32: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Действующие лица

▶ Структуры, хранящие данные о вершинах иисходящих дугах. Лежат в хранилище (GFS,СУБД)

▶ Бинарник с пользовательским кодом,выполняющийся на машинах в кластере

▶ Мастер – один из бинарников, координирующийдействия остальных

Page 33: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Состояния вершины

▶ Активное: работа еще не закончена или естьвходящие сообщения

▶ Пассивное: входящих сообщений нет,пользовательский код считает что работазакончена

▶ Пользовательское значение: какая-тоизменяемая структура

Page 34: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Коммуникация между вершинами

▶ Вершины могут посылать и приниматьсообщения

▶ Сообщение – это какая-то пользовательскаяструктура или запрос изменения топологии

Page 35: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Пошаговая стратегия

1. Граф делится на фрагменты2. Бинарники стартуют и читают свои фрагменты

(каждому достается много)3. Мастер приказывает выполнить итерацию

(superstep).4. Рабочие процессы сообщают мастеру о

результатах: сколько вершин будет активно наследующей итерации

5. Мастер может приказать рабочим сохранить ихтекущее состояние и входящие сообщения(checkpoint)

6. Если все вершины остановлены то работазавершена

7. GOTO 3

Page 36: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Во время итерации

1. Выполняет функцию compute() для каждойвершины из фрагмента и предназначенных ейсообщений из предыдущей итерации

2. Посылает и принимает сообщения текущейитерации

3. Изменяет значение в вершине и исходящихдугах

4. «Деактивирует» вершины, где работа закончена

Page 37: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Вычисление максимального значения

Page 38: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Дополнительные возможности

▶ Комбайнеры: если сообщения ассоциативные икоммутативные то перед отсылкой можнопроизвести локальную редукцию

▶ Агрегаторы▶ вершина предоставляет датчик▶ рабочий процесс аггрегирует значения датчиковпо своим вершинам

▶ мастер аггрегирует значения по рабочимпроцессам и предоставляет результат всемвершинам

Page 39: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Восстановление после сбоев

▶ Мастер пингует рабочие процессы▶ Если процесс помирает, его фрагментыпередаются другим

▶ Все читают состояние, сохраненное изпоследней контрольной точки

▶ Несколько последних итераций, возможно,будут повторены

Page 40: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Вычисление PageRank в Pregel

1 class PageRankVertex(Vertex):2 def compute(self):3 if self.superstep < 50:4 self.value = 0.15 / num_vertices + 0.85*sum(5 [pagerank for (vertex,pagerank) in self.

incoming_messages])6 outgoing_pagerank = self.value / len(self.

out_vertices)7 self.outgoing_messages =8 [(vertex,outgoing_pagerank) for vertex in self.

out_vertices]9 else:

10 self.active = False

Page 41: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Другие задачи

▶ Кратчайшие пути▶ Остовное дерево▶ Кластеризации▶ roll your own...

Page 42: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Дерево кратчайших путей

1 class SSSPVertex(Vertex):2 def update(self):3 mindist = 0 if self.is_source() else float(”inf”)4 for (vertex,dist) in self.incoming_messages:5 if mindist > dist:6 mindist = dist7 if mindist < self.value:8 self.value = mindist9 self.outgoing_messages = [(vertex, mindist + 1)

10 for vertex in self.out_vertices]11 else:12 self.active = True if mindist == float(”inf”)

else False

Page 43: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Другие подходы: метод Монте-Карло

▶ Из каждой вершины сделать несколькослучайных блужданий

▶ Для каждой вершины посчитать, сколько раз еёпосетили и нормализовать общим количествомпосещений

▶ Даёт хорошее приближение к точному PR▶ Выбором начальных вершин можноподсчитывать ”персонализированный” PR

▶ Twitter использует этот метод для обработкиграфа фолловеров на 1 машине

Page 44: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Занавес

▶ PageRank – значимость вершины графа взависимости от ее расположения в топологии

▶ Вероятность находиться в вершине прислучайных блужданиях

▶ Может вычисляться последовательностьюmap-reduce процессов

▶ Существуют более эффективные реализацииграфовых алгоритмов (Pregel, Giraph, Hama)

Page 45: Хранение и обработка больших объёмов данных: PageRank и распределенные вычисления на графах

Литература IJonathan Cohen.Graph twiddling in a mapreduce world.Computing in Science & Engineering, 11(4):29–41,2009.Grzegorz Malewicz, Matthew H Austern, Aart JC Bik,James C Dehnert, Ilan Horn, Naty Leiser, andGrzegorz Czajkowski.Pregel: a system for large-scale graph processing.In Proceedings of the 2010 international conferenceon Management of data, pages 135–146. ACM,2010.Lawrence Page, Sergey Brin, Rajeev Motwani, andTerry Winograd.The pagerank citation ranking: bringing order to theweb.1999.