realtimesystems - presentation
TRANSCRIPT
Streaming graph partitioning for large
distributed graphsWilson de Carvalho
Processamento de Dados Massivos - 10/2014
Motivação
Existência de grafos gigantescos● Grafo da web com mais de um trilhão de links
em 2011
● Facebook com mais de 1 bilhão de usuários ativos mensais (09/2014)
● Redes de proteínas
Motivação
Problema maior não é o tamanho do grafo, mas a quantidade de dados associados:
● PageRank (e outros problemas de multiplicação de matrizes)
● Broadcast de atualização de status
● Identificar associação de proteínas
● E muito mais
Motivação
● Corte de arestas corresponde (aproximadamente) ao volume de comunicação necessário
● Mover dados pela rede é muito caroo Comunicação entre processos: nanossegundoso Comunicação de rede: microssegundos
● O dado precisa ser carregado no cluster em algum momento…
● Podemos particionar enquanto carregamos os dados?
Visão Geral do Problema
11 1010 1111
10
k = 2
Visão Geral do Problema
● Partição de grafo é NP-difícil
● Partição balanceada de grafo é NP-completo
● Grandes grafos:o São mais difíceis de carregar em memória para
realizar o particionamento
o Reduzem drasticamente a quantidade de processamento que é viável - O(n) ou menor
● Os algoritmos de particionamento precisam ser
paralelos e distribuídos
O Modelo de Fluxo
𝑀𝑘
𝑀 1
𝑀 2
Fluxo do grafo →
Particionador
Grafo está ordenado:• Aleatório• Busca por largura (BFS)• Busca por profundidade
(DFS)
Objetivo: Gerar um k-particionamento aproximadamente balanceado
Cada máquina fica
com nós
𝐶=(1+𝜀)𝑛𝑘
Possível Buffer de tamanho
Heurísticas (s/ buffer)
● Balanced
● Chunking
● Hashing
● (Weighted) Deterministic Greedy
● (Weighted) Randomized Greedy
● (Weighted) Triangles
● Balance Big
Simples de fazer balanceamento enquanto ignora a estrutura do grafo
Se IDs dos vértices são consecutivos, hashing = balanced
Aleatoriedade melhora pior caso
Redes sociais possuem alto coeficiente de aglomeração ao encontrar triângulos
Usa nós com alto grau para “atrair” nós de mais baixo grau para a partição
Heurísticas (c/ buffer)
● Prefer Big
● Avoid Big
● Greedy EvoCut
Versão com buffer do Balance Big
Ideia de que nós de mais baixo grau podem ser particionados após remover os de alto grau
Abordagens em Sistemas Reais
● Usar hashing ignora arestas
● Próso Rápido para localizar dados
o Não requer DHT ou sincronização
● Contraso Hashing do ID do vértice corta uma fração de das
arestas em qualquer ordem
Abordagem do Trabalho
● Avaliadas 16 heurísticas em 21 conjuntos de
dados com cada uma das três ordenações com
números variados de partições
● Descobrir qual heurística funciona em cada
grafo
● Comparação destes com os resultados de:o Hashing aleatório para pegar o pior resultado
o METIS para obter o “melhor” desempenho offline
Observações
● METIS é uma heurística, não é o limite inferior verdadeiroo Na prática resolve
o Disponível online para reprodução dos resultados
● Conjuntos de dados públicoso Grafos tendem a ser menores que os das companhias
● Usar metadados para particionamento pode ser bomo URL para grafo da web
o Localização geográfica para usuários de rede social
Does fine in practiceAvailable online for reproducing resultsUsed publicly available datasetsPublic graph datasets tend to be much smaller than what companies haveUsing meta-data for partitioning can be goodpartitioning the web graph by URLUsing geographic location for social network users
Conjuntos de Dados
● Inclui FEM (Finite Element Meshes), redes de citação, redes sociais, grafos da web, redes de proteína e grafos gerados sinteticamente
● De 297 vértices a 41.7 milhões de vértices
● Maiores grafos: LiveJournal e Twitter
Método Experimental
● Para cada grafo, heurística, ordenação e
partição em 2, 4, 8 e 16 partes
● Comparar com corte aleatório - limite superior
● Comparar com METIS - limite inferior
● Performance medida por:
¿𝑎𝑟𝑒𝑠𝑡𝑎𝑠 𝑐𝑜𝑟𝑡 .𝑝𝑜𝑟 𝑐𝑜𝑟𝑡𝑒𝑎𝑙𝑒𝑎𝑡− ¿𝑎𝑟𝑒𝑠𝑡𝑎𝑠𝑐𝑜𝑟𝑡 .𝑝𝑜𝑟 h𝑒𝑢𝑟 í 𝑠𝑡𝑖𝑐𝑎 ¿¿ 𝑎𝑟𝑒𝑠𝑡𝑎𝑠𝑐𝑜𝑟𝑡 .𝑝𝑜𝑟 𝑐𝑜𝑟𝑡𝑒𝑎𝑙𝑒𝑎𝑡−¿
𝑎𝑟𝑒𝑠𝑡𝑎𝑠𝑐𝑜𝑟𝑡 .𝑝𝑜𝑟 𝑀𝐸𝑇𝐼𝑆 ¿
AB: Avoid BigB: BalancedPB: Prefer BigC: ChunkingDG: Determ. GreedyEDG: Exp. Det. GreedyERG: Exp. Rand. GreedyET: Exp. TrianglesGE: Greedy EvoCutH: Hashing
LDG: Linear Det. GreedyLRG: Linear Rand. GreedyLT: Linear TrianglesRG: Random. GreedyBB: Balance BigT: Triangle
Resultados
Melhor heurística, LDG, tem um ganho médio de
76% em todos os conjuntos!
Hash
METIS
Escalando o tamanho dos grafos: explorando grafos sintéticos
LDG
Hash
METIS
Mais observações
● BFS é uma ordenação superior para todos os
algoritmos
● Avoid Big foi 46% PIOR em média do que
Random Cut
Resultados em um Sistema Real● Comparação do particionamento de fluxo com o
hashing aleatório no SPARK
● Duas base de dados
o 4,6 milhões de usuários, 77 milhões
de arestas
o 41,7 milhões de usuários, 1,468
bilhão de arestas
● Calculado o PageRank de cada grafo
Resultado no Spark
Ganho no Twitter:Naïve – 19,1%
Combiner – 18,8%
Ganho no LJ:Naïve – 38,7%
Combiner– 28,8%
LJ Hash LJ Stream Twitter Hash Twitter Stream
Naïve PR Mean 296.2 s 181.5 s 1199.4 s 969.3 s
Naïve PR STD 5.5 s 2.2 s 81.2 s 16.9 s
Combiner PR Mean 155.1 s 110.4 s 599.4 s 486.8 s
Combiner PR STD 1.5 s 0.8 s 14.4 s 5.9 s
LiveJournal – 4,6 milhões de usuários, 77 milhões de arestasTwitter – 41,7 milhões de usuários, 1,468 bilhão de arestas
Dúvidas?