А. Зиновьев "big data algorithms and data structures for large scale graphs",...
DESCRIPTION
TRANSCRIPT
Докладчик: Алексей Зиновьев
Big Data algorithms and data structures for large-scale graphs
О себе
● аспирант ОмГУ, математик● занимаюсь теорией графов,
прогнозированием пробок, исследованием транспортных систем
● большой фанат различных Maps API
BigData & Graph Theory
Откуда BigData есть быти?
BigData прошлого:
● Астрономический вычисления
● Данные многолетних наблюдений за погодой
● Данные торговых операций
● Морские маршруты
А теперь
● Web-граф (модель Интернета)● Граф почтовых сообщений● Социологические исследования● Дорожные графы● Транзакции на PayPal● Граф друзей на Facebook● Анализ текстов, публикаций
Чемпионы-тяжеловесыГраф Число
вершинЧисло ребер
Объем данных на диске
Прирост в день
Web-граф 1 трлн 8 трлн 100 PB 300 TB
Facebook (граф друзей)
1 млрд 140 млрд 1 PB 15 TB
Дорожный граф Европы
18 млн 42 млн 20 GB 50 MB
Дорожный графЕкб
120 000 260 000 400 MB 100 KB
● найти ближайшую точку к данной на большом множестве точек;
● расcтояние может быть любым, в том числе быть длиной кратчайшего маршрута на графе.
Основные приложения
● сервисы рекомендаций, генетические исследования;● распознавание образов;● классификация текстов;● рекомендательные и экспертные системы;● динамическое размещение рекламы в Интернете.
Nearest Neighbor Search (NNS)
Эксперимент Милграма
● Hyper ANF - новый алгоритм, основанный на счетчиках HyperLogLog и вычислении функции соседства
● HyperLogLog - статистический счетчик (6% отклонение, 5 - 7 bits)
● Диаметр Facebook - 10 hours, 1TB RAM
Facebook 4.74 712 M 69 G
Twitter 3.67 ---- 5G follows
MSN Messenger (1 month)
6.6 180 M 1.3 G arcs
● поиск кратчайшего расстояния между двумя точками● кластеризация и поиск компонент● поиск min/max остовного дерева● задача коммивояжера● потоковые задачи● построение моделей динамических графов,
развивающихся схоже с некоторыми реальными совокупностями объектов (человечество; все научные статьи; преступления; почтовая переписка)
Основные задачи на графах
Node Centrality Problem
Зачем искать множество центральных точек?
● влияние таких точек больше остальных● удаление важных вершин снижает надежность
системы
Основные приложения
● астрофизика● биоинформатика● социальные связи● дорожные сети● изучение топологии интернета и выявление спама● системы рекомендаций
Вопросы хранения больших графов
● матрица смежности● матрица инцидентности● список смежных вершин● список ребер● различные виды деревьев● в виде стеков
и многие другие...
Все эти представления различаются по потребляемой памяти и временной сложности выполнения стандартных операций над графом.
Традиционные и не очень структуры данных
● граф в RAM, данные на диске в свободном формате● граф в RAM, данные в неграфовой СУБД● граф в RAM, данные в графовой СУБД● граф не загружается целиком в RAM, обработка идет
частями, данные на диске в произвольном формате● неграфовое представление в RAM, данные на диске в
файле или в СУБД любого типа
Для некоторых агрегационных вычислений граф не требуется представлять в памяти в виде графа и определять корректные операции
Способы работы с графом
● Оптимальна для сильносвязных сущностей
● Вершины, ребра, атрибуты● Индексы на значения
атрибутов● ACID● REST API + Cypher● Множество плагинов, включая
2d индекс
Neo4j: преимущества
● Нет полноценного горизонтального масштабирования
● Плохо приспособлен для размещения на нескольких машинах
● Лимиты и платность● Много маркетинга и
неоправданного использования
Neo4j: недостатки
Системы для вычисления на больших графах
Решение некоторых графовых задач при помощи MapReduce возможно, но не является оптимальным
● сложность сведения графовой задачи к модели key-value
● большинство графовых алгоритмов построено на итерационной обработке, что в M/R требует multiple chained jobs, что влечет полное сохранение и загрузку состояния графа (эта операция будет доминировать по времени)
Think like a vertex…
Ограничения парадигмы MapReduce
Определим две базовых операции
● Fusion - собираем информацию от соседей● Diffusion - распостраняем информацию от вершины
соседям
Храним состояние графа в памяти в течение всей обработки, сохраняя только конечное состояние и некоторые промежуточные точки прогресса.
Теперь вместо определения mapper и reducer, достаточно определить Vertex, который имеет значение и список ребер, а также способен посылать сообщения на каждой итерации.
Bulk Synchronous Parallel
Pregel - система для вычислений на больших графах
В основе Pregel лежит вершинный подход, а сама система основана на модели Bulk Synchronous Parallel
Программы обработки графов в Pregel представлены в виде последовательностей итераций, которые называются супершагами.
При выполнении супершага для каждой вершины графа запускается определенная пользователем функция, и все функции выполняются параллельно.
Pregel - система для вычислений на больших графах
Pregel - система для вычислений на больших графах
Вершины обмениваются сообщениями, а также могут изменять свое состояние и состояние смежных ребер, согласно полученной информации.
Если вершина не получила сообщений, то она становится неактивной. Если все вершины не активны, то работа алгоритма останавливается.
Pregel обеспечивает масштабируемость, устойчива к ошибкам и позволяет применять произвольные алгоритмы.
С++ API
Giraph - открытая система для вычислений на больших графах
В основе Giraph лежат статьи Google о построении собственной системы Pregel.
В свое время использовался в Facebook для анализа социального графа.
В данный момент в Giraph добавлено несколько фич, которых нет в Pregel: master computation, sharded aggregators, edge-oriented input, out-of-core computation
Giraph - открытая система для вычислений на больших графах
В данный момент доступна версия 1.0
В основе лежит модель Master/Workers, где
● Master - распределяет куски данных между Workers и синхронизирует супершаги
● Worker - загружает свой кусок графа и выполняет все вычисления, рассылает сообщения
Нет точки отказа, т.к. при падении текущего Master, на его место заступает другой. При падении Worker вычисления начинаются с последней checkpoint с меньшим количеством workers. Очередь из “заместителей” Master хранится в ZooKeeper
Альтернативная история
Дорожные графы
Не всякий граф - дорожный...
Назовем граф дорожным, если он может быть описан как граф с положительными весами, приписанными к ребрам.
Также часть ребер в таком графе может быть более важной, чем остальная (магистральные шоссе, выделенные линии связи). Это свойство может использоваться в различных алгоритмах на “дорожных” графах, чтобы вычислять кратчайшие расстояния быстрее, чем на обычных графах.
Кратчайшее расстояние на графе Европы
Поиск кратчайшего расстояния на графе - одна из важнейших задач оптимизации, причем классические подходы в данной области не оправдывают себя на больших графах.
A* - эвристический алгоритм
Каким образом можно улучшить алгоритм Дейкстры и не просматривать целиком весь граф в процессе построения кратчайшего маршрута?
Алгоритм поиска по первому наилучшему совпадению (best first) на графе, который находит маршрут с наименьшей стоимостью между двумя вершинами
Порядок обхода вершин определяется эвристической функцией «расстояние + стоимость» (обычно обозначаемой как f(v)= g(v) + h(v))
Двунаправленный поиск
Алгоритм состоит:● прямого поиска, аналогичного одиночному поиску;● обратного поиска;● операции определения принадлежности листа
другому дереву поиска.
Соединив пути получаем искомый путь. Если два поиска осуществляются параллельно — это ещё больше экономит время на получение искомого пути по сравнению с однонаправленным поиском.
Требования к системе обработки
● Необходимо быстро (10 мс) находить кратчайшее расстояние между двумя точками
● Линейность алгоритмов● Этап предварительной обработки (препроцессинг)● Не хранить все расстояния между вершинами (O(n^2)
по памяти)● Ответ может быть точным с определенной
вероятностью● Учет геоспецифики графа● Использование сжатия и перекодировки для хранения
на диске
Двухфазовые алгоритмы
Все подобные алгоритмы работают в два этапа. Первый этап включает в себя предварительную обработку графа без использования информации о том, между какими вершинами надо найти кратчайшее расстояние. Результаты обработки сохраняются в базу данных.
Второй этап - выполнение запроса к базе данных. В момент выполнения запроса известны узлы, между которыми необходимо найти кратчайшее расстояние.
Основное предположение состоит в том, что дорожная сеть слабо изменяется со временем и фазу обработки не нужно выполнять слишком часто.
Алгоритмы для вычисления кратчайшего расстояния
ALT: [Goldberg & Harrelson 05], [Delling & Wagner 07]RE: [Gutman 05], [Goldberg et al. 07]HH: [Sanders & Schultes 06]CH: [Geisberger et al. 08]TN: [Geisberger et al. 08]HL: [Abraham et al. 11]
Dijkstra ALT RE HH CH TN HL
2 008 300 24 656 2444 462.0 94.0 1.8 0.3
A* with landmarks (ALT)
● Выбираем подмножество вершин (случайно, например)● Вычисляем расстояния между ними● Вычисление нижних границ (функции h(v)) для A*
расстояний между ними происходит за O(1)
Поиск может быть направлен с двух сторон.
Низкий уровень сканирования: для того чтобы найти путь из 1000 вершин в графе с 3 млн, было просканировано всего 10 тысяч вершин.
Reach (RE)
Формализуем интуицию автомобилиста:
● он не ищет объезд вдалеке● он стремится попасть поскорее но основную скоростную
магистраль● он стремится гнать по основной магистрали, не
обращая внимание на дороги меньшего класса важности, двигаясь по направлению к цели
Contraction hierarchies (CH)
Это техника для поиска кратчайших путей в созданном на предварительной стадии особом “контрактном” графе.
Дуга может быть пропущена, если есть альтернативные пути.
Большую роль играет класс и важность дороги.
Для поиска в новом графе используется двунаправленный алгоритм Дейкстры.
Transit nodes (TN)
Граф разбивается на подграфы так, что для каждого подграфа, есть небольшой набор узлов R, таких, что все кратчайшие пути между вершинами* из региона проходят через узел из R.
Фаза препроцессинга:
● найти R для каждого региона● найти для каждой вершины его transit node из R● вычислить все пары кратчайших путей между
транзитными узлами из R
* больше определенной величины d
Затруднительные ситуации
Оптимизационные задачи на больших графах
Однако, при решении оптимизационных задач на графах, изменяющих структуру самого графа, фаза препроцессинга длиною в несколько часов становится бессмысленной.
Пример задачи: есть 1 млрд рублей на развитие дорожной сети. Каким образом можно инвестировать его, чтобы уменьшить среднее время, затрачиваемое на ежедневные межрайонные корреспонденции граждан?
Еще пример: дорожная сеть подверглась воздействию стихии, ожидается еще один удар. Где проложить новые дороги, чтобы система была максимально устойчивой?
I/O Efficient Algorithms and Data
Structures ● Традиционный подход состоит в случайном чтении из
RAM● Однако, стоит помнить, что уровней памяти много● Чем дальше от CPU, тем больше и медленнее● Данные перемещаются между уровнями большими
блоками● Часто OS берет на себя предсказание и подгрузку● Диск в 10^6 медленнее RAM● Разбиение на небольшие блоки и выполнение
операций внутри каждого блока с объединением результата уменьшает число I/O операций
Graphs and Memory Errors
Что может привести к ошибкам?
● космическое излучение● битый кусок винчестера● ошибка при передаче данных из RAM в кэш
Чем чревато?
● классические алгоритмы (слияние списков, например) не готовы к ошибкам
● выходом из строя критического оборудования● редкость ошибок - миф (эксперимент Google)
Разработка алгоритмов, устойчивых к ошибкам, ведется уже 50 лет!
Итоги
● Для анализа большого графа достаточно небольшого вычислительного кластера
● Структуры данных и способ хранения очень сильно зависят от задачи и выбранного алгоритма
● Невозможна хаотичная работа с большими данными без соответствующего математического аппарата и программного обеспечения