Upload
cs-center
View
413
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Big Data’14Лекция IV: PageRank и распределенные
вычисления на графах
Дмитрий Барашев[email protected]
Computer Science Center
3 марта 2014
Этот материал распространяется под лицензией
Creative Commons ”Attribution - Share Alike” 3.0http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru
сверстано в онлайн LATEX редакторе
P
a
peeriapapeeria.com
Сегодня в программе
PageRank
PageRank и MapReduce
Pregel
Разминка
Упорядочите слова грека, рак, река, видит изследующего корпуса документов в порядкеубывания их IDF:1. ехал грека через река2. видит грека в река рак3. сунул грека рука в река4. рак за рука грека цап
Сегодня в программе
PageRank
PageRank и MapReduce
Pregel
«Важность» документа
▶ Не все документы одинаково полезны▶ Главная страница CNN или Wikipedia имеютбольшой вес
▶ А безвестный блог в ЖЖ без читателей – чутокпоменьше
▶ Важность документа/сайта определяетсямногими сигналами
▶ поведением пользователя на страницерезультатов
▶ статистикой, собираемой службой аналитики▶ ссылками на документ
Подсчет ссылок
▶ На любой документ можно сослаться, но наважные будет больше ссылок
▶ 100500 леммингов не могут ошибаться!▶ Больше ссылок – выше ранг▶ Это уже давно практикуется в научныхпубликациях
Но SEOшник не дремлет
Случайные блуждания
▶ Мартышка с мышкой в руках случайно щелкаетпо ссылкам на странице
▶ Если на странице ссылок нет, браузер самтелепортирует мартышку на случайнуюстраницу
▶ Даже если ссылки есть, с некоторойвероятностью происходит телепорт
PageRank страницы – вероятность того чтомартышка на ней окажется
Случайные блуждания
▶ Мартышка с мышкой в руках случайно щелкаетпо ссылкам на странице
▶ Если на странице ссылок нет, браузер самтелепортирует мартышку на случайнуюстраницу
▶ Даже если ссылки есть, с некоторойвероятностью происходит телепорт
PageRank страницы – вероятность того чтомартышка на ней окажется
Ряд допущений
▶ N страниц▶ Вероятность перейти по ссылке равна
(1− α) 1|outlinks|
▶ Вероятность совершить телепорт на любуюстраницу равна α/N
▶ Для тупиковых страниц α = 1
▶ Для остальных обычно α = 0.15
Как же считать
▶ PageRank страницы зависит от 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
Математическая модель
▶ Рассмотрим матрицу
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
Математическая модель
▶ Рассмотрим матрицу
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
Математическая модель
▶ Сумма значений в каждой строке P равна 1▶ P – стохастическая матрица, представляющаяматрицу переходных вероятностей цепиМаркова
▶ Если вектор −→x0 - начальное распределениевероятностей пребывания на той или инойстранице то −→x1 = −→x0 ∗ P распределение после 1-гошага, −→x2 = −→x0 ∗ P2 – после 2-го, −→xk =
−→x0 ∗ Pk – послеk-го
▶ Известно что существует равновесноераспределение −→π являющееся собственнымвектором матрицы P: −→π P = λ−→π
▶ Собственный вектор можно вычислитьитеративно
Сегодня в программе
PageRank
PageRank и MapReduce
Pregel
Подсчет значения PageRank
▶ На каждой итерации считается новый PRстраницы j как сумма подарков от всехостальных страниц
▶ Подарки персональные и общие
Персональные подарки
▶ Если есть ссылка i → j то подарок от i равен
PRi × (1− α)× Aij
Общие подарки
▶ От каждой страницы i подарок в размере
PRi ×α
N
ΣiPRi ×α
N =α
N▶ От каждой тупиковой страницы i подарок вразмере
PRi ×(1− α)
N
Алгоритм вычисления
▶ Посчитать сумму ΣiPRi для тупиковых страниц▶ Каждая страница посылает персональныеподарки адресатам
▶ Страницы суммируют персональные подарки иобщие
Реализация на 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
Map-Reduce прекрасен, но
▶ каждая итерация делает одно и то же▶ а процессы надо запускать▶ за локальностью данных следить тяжело
Существующие решения
▶ Использовать библиотеки для одной машины▶ не масштабируется
▶ Использовать библиотеку для параллельнойобработки
▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи
▶ лень▶ Как насчет 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
▶ дороговато может выйти
Существующие решения
▶ Использовать библиотеки для одной машины▶ не масштабируется
▶ Использовать библиотеку для параллельнойобработки
▶ их еще надо поискать
▶ Написать свою инфраструктуру для своей задачи▶ лень
▶ Как насчет 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
▶ дороговато может выйти
Существующие решения
▶ Использовать библиотеки для одной машины▶ не масштабируется
▶ Использовать библиотеку для параллельнойобработки
▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи
▶ лень
▶ Как насчет 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
▶ дороговато может выйти
Существующие решения
▶ Использовать библиотеки для одной машины▶ не масштабируется
▶ Использовать библиотеку для параллельнойобработки
▶ их еще надо поискать▶ Написать свою инфраструктуру для своей задачи
▶ лень▶ Как насчет 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
▶ дороговато может выйти
хочется Map-Reduce заточенный награфовые алгоритмы
Сегодня в программе
PageRank
PageRank и MapReduce
Pregel
Pregel – это река
Инфраструктура для алгоритмов набольших графах
▶ Идея та же: программист пишет код, которыйчто-то вычисляет в вершине и посылаетсообщения другим вершинам
▶ Инфраструктура заботится о координации,масштабировании, пересылке сообщений,восстановлении после сбоев
▶ Процесс итеративный▶ Надо обработать быстрее или больше данных –добавляем машин
Действующие лица
▶ Структуры, хранящие данные о вершинах иисходящих дугах. Лежат в хранилище (GFS,СУБД)
▶ Бинарник с пользовательским кодом,выполняющийся на машинах в кластере
▶ Мастер – один из бинарников, координирующийдействия остальных
Состояния вершины
▶ Активное: работа еще не закончена или естьвходящие сообщения
▶ Пассивное: входящих сообщений нет,пользовательский код считает что работазакончена
▶ Пользовательское значение: какая-тоизменяемая структура
Коммуникация между вершинами
▶ Вершины могут посылать и приниматьсообщения
▶ Сообщение – это какая-то пользовательскаяструктура или запрос изменения топологии
Пошаговая стратегия
1. Граф делится на фрагменты2. Бинарники стартуют и читают свои фрагменты
(каждому достается много)3. Мастер приказывает выполнить итерацию
(superstep).4. Рабочие процессы сообщают мастеру о
результатах: сколько вершин будет активно наследующей итерации
5. Мастер может приказать рабочим сохранить ихтекущее состояние и входящие сообщения(checkpoint)
6. Если все вершины остановлены то работазавершена
7. GOTO 3
Во время итерации
1. Выполняет функцию compute() для каждойвершины из фрагмента и предназначенных ейсообщений из предыдущей итерации
2. Посылает и принимает сообщения текущейитерации
3. Изменяет значение в вершине и исходящихдугах
4. «Деактивирует» вершины, где работа закончена
Вычисление максимального значения
Дополнительные возможности
▶ Комбайнеры: если сообщения ассоциативные икоммутативные то перед отсылкой можнопроизвести локальную редукцию
▶ Агрегаторы▶ вершина предоставляет датчик▶ рабочий процесс аггрегирует значения датчиковпо своим вершинам
▶ мастер аггрегирует значения по рабочимпроцессам и предоставляет результат всемвершинам
Восстановление после сбоев
▶ Мастер пингует рабочие процессы▶ Если процесс помирает, его фрагментыпередаются другим
▶ Все читают состояние, сохраненное изпоследней контрольной точки
▶ Несколько последних итераций, возможно,будут повторены
Вычисление 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
Другие задачи
▶ Кратчайшие пути▶ Остовное дерево▶ Кластеризации▶ roll your own...
Дерево кратчайших путей
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
Другие подходы: метод Монте-Карло
▶ Из каждой вершины сделать несколькослучайных блужданий
▶ Для каждой вершины посчитать, сколько раз еёпосетили и нормализовать общим количествомпосещений
▶ Даёт хорошее приближение к точному PR▶ Выбором начальных вершин можноподсчитывать ”персонализированный” PR
▶ Twitter использует этот метод для обработкиграфа фолловеров на 1 машине
Занавес
▶ PageRank – значимость вершины графа взависимости от ее расположения в топологии
▶ Вероятность находиться в вершине прислучайных блужданиях
▶ Может вычисляться последовательностьюmap-reduce процессов
▶ Существуют более эффективные реализацииграфовых алгоритмов (Pregel, Giraph, Hama)
Литература 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.