modelos de computação distribuída no hadoop
DESCRIPTION
Modelos de computação distribuída no Hadoop O desenvolvimento de uma aplicação distribuída requer diversos conhecimentos para lidar com problemas como: particionamento de entrada, escalonamento da execução, comunicação entre as máquinas e falhas no cluster. Para que o desenvolvedor possa focar somente na aplicação que está sendo desenvolvida, diversos modelos para processar os dados distribuídos foram criados. Cada modelo tem suas características, pontos fracos e fortes, que os fazem apropriados para determinados tipos de aplicações. A apresentação irá abordar os temas: Hadoop 2/Map Reduce; Bulk Synchronous Parallel; Pregel; Dremel; Processamento de Stream; Próximas tecnologias. Tiago Cardoso Co-fundador e CTO da Zahpee. Mestre em Ciência da Computação pela UFMG. Co-fundador e CTO da Zahpee, trabalha há mais de quatro anos no desenvolvimento de produtos para coleta, processamento e visualização de dados.TRANSCRIPT
Modelos e Sistemas para Computação Distribuída no HadoopThiago Cardoso | @tncardoso | zahpee.com
São Paulo, BRA
Desafios da Computação Distribuída
Particionamentodos Dados
Escalonamentoda Execução
Falhas deHardware
Comunicaçãoentre Máquinas
A implementação do modelo ‘esconde’ estes desafios
Lógica para
processamento
dos dados
Por que entender os modelos?
NodeManager HiveMetastore
DataNodeSecondaryNameNode CatalogServer
NameNode JobHistoryServer Impalad
ResourceManager HiveServerStateStore
Amazon Elastic
MapReduce
O modelo utilizado deve ser escolhido de acordo com o problema
MapReduce
MapReduce
● Publicado em 2004 pelo Google
● Usuário define duas funções: map e reduce
(k1, v1) lista(k2, v2)
(k2, lista(v2)) lista(v2)
Map:
Reduce:
MapReduce
Map Reduce
MapReduce
GFS / HDFS
MapReduce - Contando palavras
palavra1 palavra2 palavra3
palavra1 palavra3
(“palavra1”, 1)
(“palavra1”, 1)
(“palavra2”, 1)
(“palavra3”, 1)
(“palavra3”, 1)
(“palavra1”, 2)
(“palavra2”, 1)
(“palavra3”, 2)
+
+
+
Map Reduce
MapReduce
Crunch
Processamento Iterativo
Jobs iterativos no MapReduceLeitura dos dados em disco
Jobs iterativos no MapReduceLeitura dos dados em disco
Mapper emite valores intermediários
Dados ordenados em disco
Jobs iterativos no MapReduceLeitura dos dados em disco
Mapper emite valores intermediários
Dados ordenados em disco
Dados enviados para reducers
Jobs iterativos no MapReduceLeitura dos dados em disco
Mapper emite valores intermediários
Dados ordenados em disco
Dados enviados para reducers
Resultado escrito em disco
Jobs iterativos no MapReduceLeitura dos dados em disco
Mapper emite valores intermediários
Dados ordenados em disco
Dados enviados para reducers
Resultado escrito em disco
Novo job é criado
Bulk Synchronous Parallel
● Publicado em 1990 por Leslie G. Valiant
● Algoritmo BSP -> Sequência de supersteps
● Cada superstep tem três fases
Bulk Synchronous Parallel
P1 P2 P3 P4 P5 P6
Computação local
Comunicação global
Barreira de sincronização
BSP - Estimando PI
Método de Monte Carlo para calcular PI
Agregador de resultados parciais
Bulk Synchronous Parallel
● Apache Hama
● BSP compatível com o Hadoop YARN
● Módulo para processamento de grafos
● Módulo para Machine Learning
Processamento de Grafos
Pregel
● Publicado em 2010 pelo Google
● Inspirado no BSP com foco em Grafos
● Um processo para cada vértice
● Vértices e arestas ficam armazenados localmente
Pregelsuperstep 0A : 3 B : 6 C : 2 D : 1
Pregelsuperstep 0
superstep 1
A : 3 B : 6 C : 2 D : 1
A : 6 B : 6 D : 6C : 2
Pregelsuperstep 0
superstep 1
superstep 2
A : 3 B : 6 C : 2 D : 1
A : 6
A : 6
B : 6
B : 6
D : 6
D : 6
C : 2
C : 6
Pregelsuperstep 0
superstep 1
superstep 2
superstep 3
A : 3 B : 6 C : 2 D : 1
A : 6
A : 6
A : 6
B : 6
B : 6
B : 6
D : 6
D : 6
D : 6
C : 2
C : 6
C : 6
Pregel
Apache Giraph Apache Hama
Processamento Real-time
Dremel
● Publicado em 2010 pelo Google
● Engine para execução de consultas
● Dados armazenados em formato
orientado a colunas
● Queries executadas de forma
nativa (não utiliza MapReduce)
Dremel
Camada de armazenamento (ex. GFS, HDFS)
SELECT A, COUNT(B) FROM T GROUP BY A
SELECT A, SUM(c) FROM (R1 UNION ALL ...Rn) GROUP BY A
Ri = SELECT A, COUNT(B) AS c FROM Ti GROUP BY A
servidor raíz
servidoresintermediários
servidoresfolha
Dremel
Spark
Processamento em Batch Sistemas Especializados
Spark
● Desenvolvido inicialmente em Berkeley
● 80 operadores para escrita de software paralelo
● Resilient Distributed Datasets (RDDs)
Spark: Resilient Distributed Datasets
● Coleção de dados particionada somente-leitura
● Criados por operações determinísticas (transformações)
em outro RDD ou arquivo
● Usuário define particionamento (otimizações de
localidade) e armazenamento (RAM, disco)
Spark: Contando palavras
file = spark.textFile("hdfs://...")
file.flatMap(lambda line: line.split())
.map(lambda word: (word, 1))
.reduceByKey(lambda a, b: a+b)
Spark: Contando palavras
A B C DflatMap map reduceByKey
Spark: Resilient Distributed Datasets
Spark: Resilient Distributed Datasets
Spark: Resilient Distributed Datasets
Spark
● Comunidade crescente
● Sub-projetos:
○ GraphX - Processamento de Grafos
○ Shark - Execução de SQL
○ Spark Streaming
○ MLlib - Machine Learning
TL;DR
Hadoop MapReduce
Hama Giraph Impala/Drill Spark
Modelo MapReduce BSP/Pregel Pregel Dremel RDD
Algoritmos iterativos x x x
Grafos x x x
Tolerancia a falhas x x x - x
Real-time x x
Thiago Cardoso | @tncardoso | zahpee.com
São Paulo, BRA
Imagens● Ungroup designed by Steve Swedler from the Noun Project● Broken Machine by Anton Håkanson from The Noun Project● Plug designed by Nick Abrams from the Noun Project● Hour Glass designed by Benni from the Noun Project● "Microsoft Bing Maps' datacenter" by Robert Scoble● "DSCN9980" by mtneer_man● Computer designed by Claudine Rodriguez from the Noun Project
Referências● http://parquet.io/● A bridging model for parallel computation● https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf● http://research.google.com/archive/mapreduce.html● http://dl.acm.org/citation.cfm?id=1807184● http://research.google.com/pubs/pub36632.html● https://hama.apache.org/● http://hive.apache.org/● https://giraph.apache.org/● http://spark.apache.org/● http://pig.apache.org/● http://crunch.apache.org/