Baixar apresentação (PDF - Português)

Propaganda
Alta performance no
processamento de Big Data
com Spark e
Lambda Expressions
Claudio Seidi @claudio_seidi
Fabio Velloso @fabiovelloso

Cláudio Seidi

Bacharel em Ciência da Computação - IME/USP

Java desde 1998

Arquiteto de Sistemas desde 2001

Certificado Cloudera

Atualmente na área de BI da Telefonica/VIVO

Fabio Velloso

Consultor da Summa Technologies

Co-Fundador e Diretor SouJava

Bacharel em Ciência da Computação - UFSCar
!
Professor de Arquitetura Orientada a Serviços - UFSCar

Projetos com Java desde 1996
Ü
Atualmente trabalhando em projetos de Integração, Big Data e Cloud Computing
Y
Palestrante em JavaOne, Abaporu, TDC, JustJava, Dia de Java, Café Brasil,
Campus Party

Agenda
!
Contexto
!
Spark
!
Aplicações
!
API
!
Arquiteturas
F
Big Data - Um Minuto na Internet em 2014
306 horas
de conteúdo
enviados
80 mil
produtos vendidos
SectionName
4.19 milhões
de buscas
433 mil
tweets
67 mil
uploads de fotos
600 mil
logins
50.200
downloads
3,4 mil
uploads
Fonte: http://www.adweek.com/socialtimes/internet-minute-2013-2014/504301
www.companyname.com
450
uploads
136.319.444
de emails
biG data
!
Hadoop
Framework open source em Java para
processar um grande volume de dados
em cluster de hardware “commodity”
F
Hadoop
Responsável por distribuir e
armazenar dados no cluster
Responsável pelo
Processamento dos dados
!
Hadoop
MAP
MAP
Worker
Java for all
Dados de
Entrada
MAP
Worker
Hadoop for all
MAP
Worker
Hello World
Java
Reduce
all
1
for
1
Java
1
reduce
Worker
Dados de
Intermediários
all
1
for
1
Hadoop
1
Hello
1
Java
1
World
1
Batch
Dados de
saída
reduce
Worker
reduce
Worker
Hadoop
1
Hello
1
Java
2
World
1
all
2
for
2
!
Hadoop / Map Reduce
!
MapReduce possibilitou e difundiu o conceito de “Big Data” analítics

Não é eficiente para analises mais complexas e multi-stage:

Iterative Machine Learning & graph processing (não map/reduce)

Iterative ad-hoc queries & Iterative algorithms

Streaming processing

Doug Cutting e Spark
“It’s easy to program, and it uses
memory more efficiently, as not all
intermediate data goes to disk.”
“Over time, fewer projects will
use MapReduce, and more will
use Spark”
“But it doesn’t make MapReduce
obsolete overnight”
http://www.techweekeurope.co.uk/workspace/cloudera-offers-apache-spark-hadoop-big-data-138723

SPARK

“Fast and general engine for large-scale data processing”

Criado para Machine Learning Distribuído e Data Mining
!
Abstração de alto nível
!
API’s em Java, Python e Scala e shell iterativo

Mais rápido que Hadoop até 100 vezes?
!
Camadas
Aplicações
RDD based
tables
Spark
Engine
e API’s
Spark SQL
RDD Based
Matrices
RDD Streams
Spark Streaming
(real time
processing)
MLlib
(Machine
Learning)
Spark Core
Resource Management
Storage
Spark Core
Spark Libs
RDD Based
Graphs
GraphX
(Graph
Processing)
Java
Python
Scala
!
Camadas e HFDS
Aplicações
RDD based
tables
Spark
Engine
e API’s
Spark SQL
RDD Streams
Spark Streaming
(real time
processing)
RDD Based
Matrices
MLlib
(Machine
Learning)
Spark Core
YARN
HDFS
Spark Core
Resource/Cluster Manager
Spark Libs
Storage
RDD Based
Graphs
GraphX
(Graph
Processing)
Java
Python
Scala
!
Camadas
Aplicações
RDD based
tables
Spark
Engine
e API’s
Spark SQL
RDD Based
Matrices
RDD Streams
Spark Streaming
(real time
processing)
MLlib
(Machine
Learning)
Spark Core
Standalone, YARN, Mesos
HDFS, Lustre, EC2/S3
Spark Core
Resource/Cluster Manager
Spark Libs
Storage
RDD Based
Graphs
GraphX
(Graph
Processing)
Java
Python
Scala
!
Camadas e conceitos
Driver Program
SparkContext
Cluster Manager
Standalone, YARN ou
MESOS
Worker Node
Worker Node
Worker Node
Worker Node
Executor Cache
Executor Cache
Executor Cache
Executor Cache
Task
Task
Task
Task
Task
Task
Task
Task

RDD - Resilient Distributed dataset
!
Unidade básica de dado no Spark
!
Abstração de memória distribuída
!
Coleção de registros para leitura
!
Se particionado é executado em vários nós do cluster
!
Não é replicado, é reconstruído em caso de falha

RDD
sparqsql.txt
Seamlessly mix SQL queries with Spark programs.
Spark SQL lets you query structured data as a
distributed dataset (RDD) in Spark, with integrated
APIs in Python, Scala and Java. This tight
integration makes it easy to run SQL queries
alongside complex analytic algorithms.
RDD
Seamlessly mix SQL queries with Spark programs.
Spark SQL lets you query structured data as a
distributed dataset (RDD) in Spark, with integrated
APIs in Python, Scala and Java. This tight
integration makes it easy to run SQL queries
alongside complex analytic algorithms.

RDD
!
Criado através de leitura de um dataset externo
!
Criado através coleções de objetos (List ou Set)

Operações RDD
Transformações
Ações
Retorna um novo RDD
filter
map
Retornam valores
first
count
RDD
inputRDD
Seamlessly mix SQL queries with Spark programs.
Spark SQL lets you query structured data as a
distributed dataset (RDD) in Spark, with integrated
map log => data, bytes
trafegados
filter log =>
codRet == 304
APIs in Python, Scala and Java. This tight
integration makes it easy to run SQL queries
alongside complex analytic algorithms.
mappedRDD
count
[23/Mar/2014:15:08:07 - 0700] , 189937
filteredRDD
# de palavras

Operações RDD
Transformações
map(func),
filter(func),
flatMap(func),
mapPartitionsWithIndex(func),
union(otherDataset),
groupByKey([numTasks]),
sample(withReplacement, fraction, seed),
intersection(otherDataset),
reduceByKey(func, [numTasks]),
(seqOp, combOp, [numTasks]),
join(otherDataset, [numTasks]),
cartesian(otherDataset),
mapPartitions(func),
aggregateByKey(zeroValue),
sortByKey([ascending], [numTasks]),
cogroup(otherDataset, [numTasks]),
pipe(command, [envVars]),
repartition(numPartitions),
distinct([numTasks])),
coalesce(numPartitions),
repartitionAndSortWithinPartitions(partitioner)

Operações RDD
Ações
reduce(func), collect(), count(), first(),
takeSample(withReplacement, num, [seed]),
saveAsTextFile(path),
takeOrdered(n, [ordering]),
*saveAsSequenceFile(path) , *saveAsObjectFile(path),
foreach(func)
* (Java e Scala)
take(n),
countByKey(),

Spark e java 7
SectionName
www.companyname.com

Lambda Expressions
!
Funções anônimas ou closures
() ->
!
Características de programação funcional
!
Programação concorrente e event-driven (ou “reactive")
!
Código mais conciso, claro e elegante
SectionName
www.companyname.com

Lambda Expressions
!
Uma expressão Lambda é composta de três partes
Argument List
Arrow Token
(int x, int y)
!
!
SectionName
->
(x, y) -> x+y
x -> x*10
(name) -> { System.out.println(“Olá” + name); }
Processamento de coleções
www.companyname.com
Body
x+y
() ->
!
Spark e Lambda Expressions
!
Java 7
!
Java 8 e Lambda Expression
SectionName
www.companyname.com

Spark e Lambda Expressions
SectionName

Spark e Lambda Expressions
scala> val arqTxt = sc.textFile(“teste.txt")
Shell
scala> val palavras = arqTxt.flatMap(line => line.split(“\\W"))
scala> val contaPalavras = palavras.countByValue()
JaVA

SPARK - Alta Performance

Processamento em memória e cache de dados

Carga e processamento respeitando localidade

Micro batch architecture e Stream

Directed Acyclic Graph (DAG) engine

RDD - Lineage graph
filter
_.(isAtivo)
textFile()
Clientes
Clientes
Ativos
Clientes
JOIN
Cliente
Produto
textFile()
Produtos
JOIN
Campanha
Adequação
FILTER
Consumo > Franquia
Produtos
textFile()
fillter
Consumo
Mensal
Consumo
Mensal
Cliente
Consumo
Consumo
2015
Jan_MAIO
REDUCE
BY KEY
Média
Consumo
save()

DAG
Clientes
Clientes Ativos
Cliente Produto
filter
_.(isAtivo)
Produtos
Cliente Consumo
CampanhA Adequação
JOIN
save()
estágio 1
Consumo Mensal
Consumo 2015 Jan_MAIO
filter
FILTER
Consumo > Franquia
Média Consumo
JOIN
estágio 2
REDUCE
BY KEY
estágio 3
\
Mineração de dados
!
SectionName
Atividade com o objetivo de obter conhecimento
!
Algoritmos de Machine Learning
!
Reconhecimento de Padrões
!
Estatística
www.companyname.com
!
Machine Learning
Definição Formal - Tom Mitchell (1998)
!
Dizemos que um programa de computador está aprendendo quando:
de uma experiência E, a respeito de uma tarefa T e com uma medida de
desempenho P, se o seu desempenho em T, medido em P, melhora com a
experiência E.
T
SectionName
!
T (Tarefa) - fazer gol
!
E (experiência) - chutar a bola
!
P (Desempenho) - número de
gols marcados
www.companyname.com
P
E
!
Machine Learning
29/Maio/2015
http://www.computerworld.com/article/2927931/robotics/why-apple-is-developing-artificial-intelligence.html
SectionName
www.companyname.com
!
Machine Learning
29/Maio/2015
http://www.zdnet.com/article/google-bets-machine-learning-can-create-an-edge-with-android-apps-cloud/
SectionName
www.companyname.com
!
Machine Learning
Não é ficção!
Vários serviços/produtos são baseados nesta tecnologia.
Facebook: Detecção e Reconhecimento de Faces
É capaz de reconhecer até o rosto de um japonês!
SectionName
www.companyname.com
Amazon: Recomendação de Livros
(Collaborative Filter)
!
Machine Learning
Supervisionado
SectionName
Fonte: https://adcalves.files.wordpress.com/2014/06/ml-flowchart.jpg
Não Supervisionado
!
Machine Learning

Necessidade de alta performance

Dado é acessado iterativamente

Spark mais indicado

Dados em memória
!
Baixa latência

Sistema de recomendação
Sistema de
Recomendação
Ideal
Desafios da
Vida Real
Grande Volume de Dados
Único jeito de
adivinhar o gosto do
cliente!
X
Escalabilidade
Diversidade de
Clientes e gostos
Ataques
“Shilling attacks”

Sistema de recomendação
Filtro Colaborativo

Sistema de recomendação
Filtro Colaborativo
Usuários similares
Recomendação
!
Executado para todos os
usuários e a cada nova
informação
Tipos de Sistema de Recomendação
!
Baseado no Usuário
!
Baseado em Itens
!
Machine learning
Por que Spark é indicado para Machine Learning?
Logistic regression in Hadoop and Spark
SectionName
www.companyname.com
!
Machine Learning
HDFS
Read
HDFS
Write
HDFS
Read
HDFS
Write
1a Iteração
2a Iteração
1a Iteração
2a Iteração
Input
HDFS
Read
Input
Spark mais performático a cada iteração
!
Machine learning
http://pt.slideshare.net/cloudera/spark-webinar-92314-dl
!
MLLIB
!
Algoritmos e estruturas para Machine Learning

Classificação, Collaborative Filtering, Clustering
SectionName
!
mllib E MAHOUT
SectionName
www.companyname.com
!
MLLIB
Conjunto ainda incompleto de algoritmos
SectionName
www.companyname.com
!
mllib
Algoritmos em implementação
Redes Neurais
SectionName
www.companyname.com

Spark StreAming
Receivers
batches of
input data

Micro-batch architecture

Streaming em pequenos “batches” de dados

Processar com funções como map, reduce, join …

!
Spark StreAm
DStream ou discretized stream
data from
time 0 to 1
DStream
!
Abstração de stream
contínuo de dados
!
Sequência de RDDs
!
Intervalo de criação configurável
a partir de 500ms
0
log lines
DStream
fraudes
DStream
data from
time 1 to 2
1
data from
time 2 to 3
2
data from
time 3 to 4
3
4
data from
time 0 to 1
data from
time 1 to 2
data from
time 2 to 3
data from
time 3 to 4
data from
time 0 to 1
data from
time 1 to 2
data from
time 2 to 3
data from
time 3 to 4
tempo
Filter
detectar
fraudes

Spark StreAm

Spark SQL
!
Módulo para trabalhar com dados estruturados e não estruturados
!
SQL, JDBC e ODBC
JSON, Hive, Bancos relacionais via JDBC, Parquet, HDFS, S3
!
Avro, CSV, ElasticSearch e Cassandra
!
SQLContext e HiveContext
!
DataFrame

Spark SQL - DataFrame

“Coleção de dados distribuídos e organizados em colunas com nomes”

DataFrame é análogo a uma tabela de um banco relacional.

Pode ser construído a partir de arquivos, tabelas e RDDs
DataFrame
{
RDD
Cliente
Cliente
Cliente
Schema
Nome Endereço Telefone Email
Nome Endereço Telefone Email
Nome Endereço Telefone Email

Spark SQL
JDBC

Spark SQL

Spark e NoSQL
!
Acesso a dados carregados no HDFS
Spark SQL
Streaming
MLib
Spark Core
GraphX
Java
Scala
Python
YARN
HDFS
NoSQL
!
Conectores
Fonte: http://web.eecs.umich.edu/~prabal/teaching/resources/eecs582/armbrust15sparksql.pdf

Spark e NoSQL

Arquitetura integrada
Dados agregados
baixa latência
Fonte de Dados
Aplicações
Online
Data Mining
e
Aplicações
Batch
Raw Data
e Dados Históricos
SectionName

Arquitetura integrada
Dados agregados
baixa latência
ArduinO
Aplicações
Online
Data Mining
e
Aplicações
Batch
Raspberry Pi
Intel Galileo
RFID
Raw Data
e Dados Históricos
SectionName
!
Conclusão
!
Spark para algoritmos iterativos
!
Usado em conjunto com Hadoop e HDFS
!
Batch em Hadoop
!
Spark Stream, Spark SQL e Spark Graphx
!
Lambda para código mais conciso
SectionName
www.companyname.com
Perguntas ??
Obrigado !!
Claudio Seidi @claudio_seidi
Fabio Velloso @fabiovelloso
Download