spark - inteligência na web e big data · spark inteligêncianawebebigdata...

46
Spark Inteligência na Web e Big Data Fabricio Olivetti de França e Thiago Ferreira Covões [email protected], [email protected] Centro de Matemática, Computação e Cognição Universidade Federal do ABC

Upload: others

Post on 16-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

SparkInteligência na Web e Big Data

Fabricio Olivetti de França e Thiago Ferreira Covõ[email protected], [email protected]

Centro de Matemática, Computação e CogniçãoUniversidade Federal do ABC

Page 2: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Apache Spark

Page 3: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Spark: Além do MapReduce

De tal forma a facilitar o desenvolvimento de aplicações egeneralização de tarefas comuns no MapReduce, foi criada aplataforma Spark.

• Mais eficiente: computação distribuída + multithreading.• Linguagem estendida.• Compartilhamento de Dados mais rápido.• Árvore de processamento.• Suporte a Scala, Java, Python, R.

1

Page 4: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Resilient Distributed Dataset: RDD

Abstração principal do Spark:

• A base de dados é um objeto.• Aplica operações nesses objetos, como métodos

• Pode estar armazenado em Hadoop, sistema de arquivocomum ou até na memória (transparente).

• Transformações (paralelas) e Ações (saída de dados).• Refaz operações em caso de falhas.

2

Page 5: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Criando uma linguagem deprocessamento de dados

Page 6: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Criando uma linguagem de processamento de dados

Que tipos de operações precisamos?

3

Page 7: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Criando uma linguagem de processamento de dados

• Temos uma coleção de registros, precisamos aplicarcertas operações neles e obter resultados.

• Esses registros são imutáveis, sempre gero nova coleção.

4

Page 8: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Map

Precisamos processar cada registro de forma independente:

Figura 1: Fonte: https://roegiest.com/

5

Page 9: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Map

É fácil paralelizar os mappers, eles independem dos outrosregistros!

6

Page 10: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

MapReduce

Figura 2: Fonte: https://roegiest.com/

7

Page 11: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

MapReduce

1 List (k1, v1) -> map :: (k1, v1) -> List (k2, v2)2 -> reduce :: (k2, Iterable v2) -> List (k3, v3)

8

Page 12: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Composição

Figura 3: Fonte: https://roegiest.com/

O Apache Spark resolve o problema de composição!

9

Page 13: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Operações em uma RDD

Page 14: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Map

Figura 4: Fonte: https://roegiest.com/

10

Page 15: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Reduce

Figura 5: Fonte: https://roegiest.com/

11

Page 16: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Sort

Figura 6: Fonte: https://roegiest.com/

12

Page 17: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Join

Figura 7: Fonte: https://roegiest.com/

13

Page 18: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Join

Figura 8: Fonte: https://roegiest.com/

14

Page 19: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Set

Figura 9: Fonte: https://roegiest.com/

15

Page 20: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Tipo Set

Figura 10: Fonte: https://roegiest.com/

16

Page 21: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Directed Acyclic Graph: DAG

No MapReduce do Hadoop, cada operação Map-Reduce éindependente uma da outra, mesmo quando as tarefas estãointerligadas.

Considere o problema de retornar a contagem de palavrasordenadas pela frequência:

1 mapper1 :: Linha -> [(Palavra, Integer)]2 reducer1 :: [(Palavra, [Integer])] -> [(Palavra,

Integer)]↪→

3

4 mapper2 :: (Palavra, Integer) -> [(Integer, Palavra)]5 reducer2 :: [(Integer, [Palavra])] -> [(Integer,

[Palavra])]↪→

Qual a definição das funções mapper2 e reducer2?17

Page 22: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Directed Acyclic Graph: DAG

Primeiro, o Hadoop irá completar TODA a tarefa MapReduce1.Somente após a conclusão e escrita do arquivo de saída(escrita custa caro!), a tarefa MapReduce2 iniciará, para entãogerar a resposta.

18

Page 23: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Directed Acyclic Graph: DAG

No Spark, é feito um grafo direcionado e acíclico (árvore) deprocessamento que interliga as tarefas de MapReduce (ououtras transformações) para gerar o menor número de escritaspossíveis.

19

Page 24: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Directed Acyclic Graph: DAG

Uma vez que a RDD é imutável e as transformações devemser puras, é possível fazer a composição dessas funções semintroduzir efeitos inesperados.

20

Page 25: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Contador de palavras - SPARK

1 val textFile = sc.textfile(args.input())2

3 textFile4 .flatMap(line => tokenize(line))5 .map(word => (word, 1))6 .reduceByKey(_+_)7 .saveAsTextFile(args.output())

21

Page 26: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Transformações Básicas

Page 27: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Criando uma RDD

Uma RDD pode ser criada a partir de uma coleção emmemória ou um arquivo existente no sistema de arquivos(distribuídos ou não)~1.

1 listaComidas = ['bife', 'alface', 'arroz']2 comidasRDD = sc.parallelize(listaComidas, 2)3 textoRDD = sc.textFile(nomeArquivo, 2)

O segundo parâmetro é a quantidade de partições por nó local.O ideal é criar cerca de 2 partições por core

1os comandos seguem a sintaxe Pyspark

22

Page 28: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

MapReduce

1 # [Linha] -> [Int] -> [Int] -> Int2 textoRDD.map(lambda linha: length(linha))3 .reduce(lambda (l1, l2): l1 + l2)

Nota: reduce é uma ação, e portanto força o processamento.

23

Page 29: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

reduceByKey

Parecido com o procedimento que fizemos até então noHaskell: aplica uma função no resultado de groupByKey .sortByKey:

1 # [Linha] -> [(Palavra, Int)] -> [(Palavra,[Int])]2 # -> [(Palavra, Int)]3 textoRDD.flatMap(lambda linha: [(w,1) for w in

linha.split()])↪→

4 .reduceByKey(lambda f1,f2: f1+f2)

24

Page 30: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

groupByKey

Retorna o resultado de groupByKey . sortByKey após um map:

1 # [Linha] -> [(Palavra, Int)] -> [(Palavra,[Int])]2 textoRDD.flatMap(lambda linha: [(w,1) for w in

linha.split()])↪→

3 .groupByKey()

25

Page 31: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

filter

Similar ao Haskell, remove da RDD todos os elementos queretorna falso para a função passada como parâmetro:

1 # [Linha] -> [(Palavra, Int)] -> [(Palavra,[Int])]2 textoRDD.flatMap(lambda linha: [(w,1) for w in

linha.split()])↪→

3 .reduceByKey(lambda f1,f2: f1+f2)4 .filter(lambda (w, f): f > 3)

26

Page 32: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

join

Une a RDD de tuplas com outra RDD de tuplas dado que aschaves são do mesmo tipo:

1 # [(Palavra, Int)] -> [(Palavra, Int)]2 # -> [(Palavra, (Int, Int))]3 freqPalavraRDD.join(idfPalavraRDD)

27

Page 33: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

cartesian

Une duas RDDs através de um produto cartesiano de seuselementos:

1 # [(Palavra, Int)] -> [(Palavra, Int)]2 # -> [(Palavra, Int), (Palavra, Int)]3 freqPalavraRDD.cartesian(freqPalavraRDD)

28

Page 34: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Pipelines de processamento

Conforme mencionado anteriormente, o retorno dastransformações do Spark são intenções de computação, asequência de transformações formam um pipeline deprocessamento a ser computado quando necessário.

1 pipeline1 = RDD.transforma1()2 .transforma2()3 .transforma3()4

5 pipeline2 = pipeline1.transforma1()6 .transforma2()7

8 pipeline3 = pipeline1.transforma1(pipeline2)9 .transforma2()

29

Page 35: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Pipelines de processamento

Dessa forma, o Spark consegue otimizar o processamento eevitar redundâncias.

30

Page 36: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Ações Básicas

• .collect(): retorna a RDD em memória.• .first(): retorna o primeiro elemento da RDD.• .take(n): retorna os n primeiros elementos da RDD.

31

Page 37: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Associatividade e Comutatividade

Page 38: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Por que queremos operadores associativos?

Com a associatividade podemos colocar os parênteses ondefor mais conveniente:

(x1 ⊗ x2)⊗ (x3 ⊗ x4 ⊗ x5)⊗ (x6 ⊗ x7) (1)(x1 ⊗ x2 ⊗ x3 ⊗ x4)⊗ (x5 ⊗ x6 ⊗ x7) (2)(x1 ⊗ x2)⊗ (x3⊗)(x4 ⊗ x5 ⊗ x6 ⊗ x7) (3)

(4)

32

Page 39: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Por que queremos operadores associativos?

Dessa forma, não importa como os dados estão agrupados, oresultado será o mesmo!

33

Page 40: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Por que queremos comutatividade?

Podemos trocar a ordem dos operandos!

(x1 ⊗ x2)⊗ (x3 ⊗ x4 ⊗ x5)⊗ (x6 ⊗ x7) (5)(x5 ⊗ x4 ⊗ x3 ⊗ x1)⊗ (x2 ⊗ x6 ⊗ x7) (6)

(x3 ⊗ x2)⊗ (x1)⊗ (x7 ⊗ x5 ⊗ x6 ⊗ x4) (7)(8)

34

Page 41: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Por que queremos comutatividade?

Dessa forma, não importa como distribuímos os dados, oresultado final será o mesmo!

35

Page 42: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Implicações

• Não sabemos quando a tarefa começa• Não sabemos quando a tarefa termina• Não sabemos quando as tarefas se interrompem• Não sabemos quando dados intermediários chegam

Sem problemas!

36

Page 43: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Pergunta

Uma sequência de flatMaps pode ser composta e otimizada?

1 val textFile = sc.textfile(args.input())2

3 textFile4 .flatMap(line => tokenize(line))5 .flatMap(word => tokenize(word))6 .map(char => (char, 1))7 .reduceByKey(_+_)8 .saveAsTextFile(args.output())

37

Page 44: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Resposta

Sim!

1 val textFile = sc.textfile(args.input())2

3 textFile4 .flatMap(line => tokenize(line)5 .myFlatMap(word => tokenize(word))6 )7 .map(char => (char, 1))8 .reduceByKey(_+_)9 .saveAsTextFile(args.output())

38

Page 45: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Comentários Finais

Page 46: Spark - Inteligência na Web e Big Data · Spark InteligêncianaWebeBigData FabricioOlivettideFrançaeThiagoFerreiraCovões folivetti@ufabc.edu.br,thiago.covoes@ufabc.edu.br CentrodeMatemática

Comentários Finais

• Spark apresenta um conjunto de funções além dotradicional MapReduce.

• Esse framework otimiza sequências de Map e Reduces detal forma a não precisar passar várias vezes pelo RDD.

39