SlideShare a Scribd company logo
1 of 44
Globalcode – Open4education
Instanciando a Arquitetura Lambda com
GraphX e Elasticsearch 2.0
em uma aplicação de redes sociais
Luiz Henrique Zambom Santana
lhzsantana@gmail.com
Globalcode – Open4education
Agenda
Apresentação e introdução
Histórico: MapReduce e Hadoop
Buzz atual sobre Spark e Elasticsearch
Visão geral do Spark e GraphX
Visão geral do Elasticsearch 2.0
Arquitetura Lambda
Aplicação de Redes Sociais
Código
Conclusões
Globalcode – Open4education
Apresentação
Doutorando na UFSC
Consultor e programador freelancer
Trabalhando com Elasticsearch desde 2013 (versão 0.9.x)
Trabalhando com Spark desde o começo de 2015
Autor de artigos, Blog (luizsantana.info) e livros
Globalcode – Open4education
Big Data na minha visão
Sempre esteve por aí
“Mais dados que a computação atual pode suportar”
Roger Magoulas, em 2005. Será que ainda é válido?
Sim (!), o desafio atual é deixar a Big Data mais fácil e barata
Parte de uma onda que também inclui Cloud Computing e Lean Startup,
tentando lidar com a complexidade do desenvolvimento de software atual
Uma infinidade de ferramentas
Processamento: Hadoop, Spark, Storm, Mahout..
Armazenamento: Cassandra, MongoDB...
Cache: Redis, Memcache...
Integração: Kafka, RabitMQ, Logstash...
Análise: R, Spark, Mahout...
Visualização: Kibana, Tableau...
...
Globalcode – Open4education
Globalcode – Open4education
No começo era: MapReduce e Hadoop
MapReduce
Criado e usado pelo Google, publicado em 2004
Apesar das críticas (especialmente do Stonebraker)
Preocupado com Vasão
Motivou ou influenciou a criação de muitas
ferramentas que conhecemos (MongoDB e
Hadoop) ou estamos nos conhecendo
(Elasticsearch)
Problema: nós – usuários - ficamos mal
acostumados
Queremos baixa Latência e Tempo-real
Globalcode – Open4education
Qual é o problema?
100 ms
150 ms
200 ms
Globalcode – Open4education
NoSQL é a realidade
Sadalage e Fowler, 2012
(http://martinfowler.com/books/nosql.html)
Not only SQL
Nathan Marz, 2014
(http://www.slideshare.net/nathanmarz/runaway-complexity-in-big-data-and-a-plan-to-stop-it)
Relational databases will be a
footnote in history
Globalcode – Open4education
Buzz atual sobre Spark e Elasticsearch
Globalcode – Open4education
Visão geral do Apache Spark
Desenvolvido na Universidade da Califórnia em
Berkley, no AmpLab
Principalmente durante a tese de doutorado do
Prof. Dr. Matei Zaharia orientado pelo Prof. Dr. Ion
Stoica
No ano passado foi fundada a Databricks
Oferece:
Processamento de uma grande quantidade de dados
com baixa latência
Uma grande quantidade de ferramentas para
transformações e análises
Globalcode – Open4education
Comparação com o Hadoop
Dados em memória principal
100x mais rápido em memória principal
10x mais rápido em disco
Menor número de máquinas = Mais barato
Muito mais fácil de usar
Um conjunto completo de ferramentas
Globalcode – Open4education
Resilient Distributed Data (RDD)
Principal abstração do Spark
Para mais detalhe ver a tese
de doutorado do Matei
Zaharia
Fornecem uma abstração de
memória compartilhada
Com o RDDs o Spark é
capaz de realizar
transformações em paralelo
(potencialmente,sobre parte
do conjunto de dados)
Globalcode – Open4education
Spark e GraphX
Globalcode – Open4education
GraphX
Ferramenta para Grafos
Distribuição de Grafos no RDD
Implementação de algoritmos como:
PageRank
Subgrafo
Elementos conectados
Contagem de triângulos
Globalcode – Open4education
Resilient Distributed Data (RDD)
Principal abstração do Spark
Para mais detalhe ver a tese
de doutorado do Matei
Zaharia
Fornecem uma abstração de
memória compartilhada
Com o RDDs o Spark é
capaz de realizar
transformações em paralelo
(potencialmente,sobre parte
do conjunto de dados)
Globalcode – Open4education
RDD no GraphX
Globalcode – Open4education
Visão geral do Elasticsearch
Desenvolvido pelo israelense Shay
Banon desde de 2010
Até 2014 um projeto open-source,
quando foi criada a Elastic
Oferece:
Grande poder de buscas, usando o
Apache Lucene
Alta escalabidade
Um ambiente completo com o ELK,
Watcher, Shield e Marvel
Globalcode – Open4education
Elasticsearch 2.0
Já pode ser testado:
https://www.elastic.co/downloads/past-
releases/elasticsearch-2-0-0-beta1
Existe o plugin de migração:
https://github.com/elastic/elasticsearch-migration
Breaking changes in 2.0:
https://www.elastic.co/guide/en/elasticsearch/reference/2
.0/breaking-changes-2.0.html
Globalcode – Open4education
Elasticsearch 2.0
As principais:
Uso do Lucene 5
Pipeline de agregações
Unificação de query/filter
Compressão
Lucene 5
Resultado: mais dados em cache e em disco
Rivers já não existem! Use o Logstash ou a API de bulk
para enviar dados
MVEL foi substituído por Groovy
Globalcode – Open4education
Elasticsearch 2.0
Prefixo de tipo foi removido
O que era assim:
GET my_index/_search
{
"query": {
"match": {
"my_type.some_field": "quick brown fox"
}
}
}
No 2.0 vai ser feito da seguinte forma:
GET my_index/my_type/_search
{
"query": {
"match": {
"some_field": "quick brown fox"
}
}
}
Globalcode – Open4education
Elasticsearch 2.0
Outras mudanças importantes:
API Java
Configurações
Mudanças no Parent/Child
Globalcode – Open4education
Arquitetura Lambda
Globalcode – Open4education
Aplicação
Parte de uma aplicação maior, que realiza análise
de sentimento na rede de contatos
Dados do Twitter, coletados com o Twitter4J
Funcionalidade:
Ordenar os resultados da busca no Elasticsearch
usando a importância do usuário para a rede social
(Page Rank)
Palavras-chave: Java, Scala, Maven, Eclipse, Twitter4J,
Elasticsearch, Spark, GraphX e Cassandra
Globalcode – Open4education
Arquitetura da aplicação
Speed Layer
Indexa usuários
Calcula PageRank e
Salva usuários
Batch e Serving Layers
Buscas e agregações
Views
Globalcode – Open4education
Ambiente de desenvolvimento
Eclipse
Scala IDE
Maven
Instalar Spark
Instalar Elasticsearch
Globalcode – Open4education
Código - Maven
Importante: vou pular as partes óbvias
https://github.com/lhzsantana/tdc-graphx-elasticsearch
Criar um projeto Maven no Eclipse
Maven:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-graphx_2.10</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.0.0-beta2</version>
</dependency>
Globalcode – Open4education
Código - Twitter4J e Cassandra
Meramente auxiliares:
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>4.0.4</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.0.0-alpha3</version>
</dependency>
Globalcode – Open4education
Código – Recupera seguidores
ConfigurationBuilder configurationBuilder = null;
Twitter twitter = null;
public TwitterReader(..) {
configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthAccessToken(accessToken)
.setOAuthAccessTokenSecret(secretToken)
.setOAuthConsumerKey(consumerKey)
.setOAuthConsumerSecret(consumerSecret);
twitter = new TwitterFactory(configurationBuilder.build()).getInstance();
}
public PagableResponseList<User> getSeguidores(String nome) throws
TwitterException {
return twitter.getFollowersList(nome, 0);
}
Globalcode – Open4education
Código – Spark Context
Scala
Globalcode – Open4education
Código – Criar grafo
Scala
Globalcode – Open4education
Código – Armazenar grafo
Globalcode – Open4education
Código – Calcular PageRank
Globalcode – Open4education
Código – Elasticsearch
Mapeamento
Globalcode – Open4education
Código – Elasticsearch
Busca - Unificação de query/filter
Pipeline de agregações
Globalcode – Open4education
Código – Pipeline de agregações
Agregar
1. Os usuários de acordo
com seus seguidores
2. Os usuários em faixas
de acordo com seu
pagerank
https://www.elastic.co/guide/
en/elasticsearch/reference/
master/search-
aggregations-pipeline.html
Globalcode – Open4education
Código – query/filter
Buscar usuários de acordo com seus seguidores:
Globalcode – Open4education
Execução
Iniciar Cassandra
Iniciar Elasticsearch
bin/elasticsearch
Iniciar Spark
binspark-class.cmd org.apache.spark.deploy.master.Master
Vá em http://localhost:8080/ e veja qual é o endereço do master
(geralmente spark://<IP>:7077).
binspark-class.cmd
org.apache.spark.deploy.worker.Worker spark://<IP>:7077
Globalcode – Open4education
Execução
Globalcode – Open4education
Melhorias
Usar Kafka para
Sistema de mensagens como publish-subscribe
Usar Ignite
Para controle de transações
Usar o streaming do Twitter
http://twitter4j.org/javadoc/twitter4j/TwitterStream.html
Globalcode – Open4education
Conclusões
Uma arquitetura ótima teria também outros
componentes, como Redis, Kafka, Ignite,
MongoDB... E outros
Opinião: Dificilmente o Hadoop vai alcançar o
Spark em nível de abstração e facilidade de uso
O Spark, GraphX e o Elasticsearch permitem um
novo nível de solução
Tempo-real, análise e busca
Arquitetura Lamba facilita a organização das
ferramentas
Globalcode – Open4education
Conselho
Acompanhe os arquivos do curso do Matei Zaharia no MIT:
6.S897: Large-Scale Systems
http://people.csail.mit.edu/matei/courses/2015/6.S897/
Globalcode – Open4education
O que ver mais?
Spark:
MLlib
Streaming
R
Elasticsearch:
Kibana
Logstash
Globalcode – Open4education
Obrigado!
Em breve:
RS Data Science Meetup
http://www.meetup.com/pt/RS-Data-Science-Meetup/
7/10/2015
Artigo na Java Magazine 144:
Apache Spark: Como criar um mecanismo de sugestão de produtos
Filtragem colaborativa
Entre 12 e 16 de Outubro
Artigo DevMedia com o código completo:
http://www.devmedia.com.br/space/luiz-henrique-zambom-santana
Apresentação no WebMedia:
http://webmedia.icomp.ufam.edu.br/index.php/presentation/accepted-
papers
Globalcode – Open4education
Referências
Ótima apresentação sobre GraphX
http://stanford.edu/~rezab/nips2014workshop/slides/ank
ur.pdf
Tese de doutorado do Matei Zaharia
https://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EE
CS-2014-12.html

More Related Content

What's hot

Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...tdc-globalcode
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixJanssen Lima
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorPrimeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorRobert Silva
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb javaFabiano Modos
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchLuiz Henrique Zambom Santana
 

What's hot (20)

Workshop de ELK - EmergiNet
Workshop de ELK - EmergiNetWorkshop de ELK - EmergiNet
Workshop de ELK - EmergiNet
 
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
 
Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do Zabbix
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Elasticsearch 5.0
Elasticsearch 5.0Elasticsearch 5.0
Elasticsearch 5.0
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorPrimeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e ElasticsearchUma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
Uma visão sobre Fast-Data: Spark, VoltDB e Elasticsearch
 

Similar to Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma aplicação de redes sociais

TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Felipe Schimith Batista
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time Umbler
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptMarcos Artigas
 
VoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQLVoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQLLuiz Henrique Zambom Santana
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dadostdc-globalcode
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkDr. Spock
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começouJose Wilker
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começouJose Wilker
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Frederico Maia Arantes
 
Amazon WebServices Architectur
Amazon WebServices ArchitecturAmazon WebServices Architectur
Amazon WebServices ArchitecturRafael Nunes
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerWellington Silva
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouJose Wilker
 
Spring + Cloud Computing
Spring + Cloud ComputingSpring + Cloud Computing
Spring + Cloud ComputingDr. Spock
 

Similar to Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma aplicação de redes sociais (20)

TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6Arquitetura do Framework Apache Hadoop 2.6
Arquitetura do Framework Apache Hadoop 2.6
 
Tdc2014 azure redis cache
Tdc2014   azure redis cacheTdc2014   azure redis cache
Tdc2014 azure redis cache
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
VoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQLVoltDB: as vantagens e os desafios dos banco de dados NewSQL
VoltDB: as vantagens e os desafios dos banco de dados NewSQL
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do Framework
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começou
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
 
Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começou
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
 
Amazon WebServices Architectur
Amazon WebServices ArchitecturAmazon WebServices Architectur
Amazon WebServices Architectur
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começou
 
Spring + Cloud Computing
Spring + Cloud ComputingSpring + Cloud Computing
Spring + Cloud Computing
 
IC-Testes Invasao
IC-Testes InvasaoIC-Testes Invasao
IC-Testes Invasao
 

More from Luiz Henrique Zambom Santana

Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...Luiz Henrique Zambom Santana
 
Apache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkApache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkLuiz Henrique Zambom Santana
 
De Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipeDe Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipeLuiz Henrique Zambom Santana
 
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...Luiz Henrique Zambom Santana
 
A middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQLA middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQLLuiz Henrique Zambom Santana
 
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL DatabasesA Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL DatabasesLuiz Henrique Zambom Santana
 
Design of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore ArchitectureDesign of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore ArchitectureLuiz Henrique Zambom Santana
 
An Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL RepositoriesAn Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL RepositoriesLuiz Henrique Zambom Santana
 
Exploiting the query structure for efficient join ordering in SPARQL queries
Exploiting the query structure for efficient join ordering in SPARQL queriesExploiting the query structure for efficient join ordering in SPARQL queries
Exploiting the query structure for efficient join ordering in SPARQL queriesLuiz Henrique Zambom Santana
 
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação Ubíqua
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação UbíquaADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação Ubíqua
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação UbíquaLuiz Henrique Zambom Santana
 

More from Luiz Henrique Zambom Santana (20)

Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
Perspectives on the use of data in Agriculture - Luiz Santana - Leaf Agricult...
 
Apache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with SparkApache Sedona: how to process petabytes of agronomic data with Spark
Apache Sedona: how to process petabytes of agronomic data with Spark
 
De Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipeDe Arquiteto para Gerente: como debugar uma equipe
De Arquiteto para Gerente: como debugar uma equipe
 
IBM Watson, Apache Spark ou TensorFlow?
IBM Watson, Apache Spark ou TensorFlow?IBM Watson, Apache Spark ou TensorFlow?
IBM Watson, Apache Spark ou TensorFlow?
 
Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3Banco de dados nas nuvens - aula 3
Banco de dados nas nuvens - aula 3
 
Banco de dados nas nuvens - aula 2
Banco de dados nas nuvens - aula 2Banco de dados nas nuvens - aula 2
Banco de dados nas nuvens - aula 2
 
Banco de dados nas nuvens - aula 1
Banco de dados nas nuvens - aula 1Banco de dados nas nuvens - aula 1
Banco de dados nas nuvens - aula 1
 
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...Workload-Aware RDF Partitioning  and SPARQL Query Caching for Massive RDF Gra...
Workload-Aware RDF Partitioning and SPARQL Query Caching for Massive RDF Gra...
 
A middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQLA middleware for storing massive RDF graphs into NoSQL
A middleware for storing massive RDF graphs into NoSQL
 
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL DatabasesA Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
A Workload-Aware Middleware for Storing Massive RDF Graphs into NoSQL Databases
 
Normalização
NormalizaçãoNormalização
Normalização
 
SQL Joins
SQL JoinsSQL Joins
SQL Joins
 
Consultas básicas em SQL
Consultas básicas em SQLConsultas básicas em SQL
Consultas básicas em SQL
 
Processamento em Big Data
Processamento em Big DataProcessamento em Big Data
Processamento em Big Data
 
Design of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore ArchitectureDesign of Experiments on Federator Polystore Architecture
Design of Experiments on Federator Polystore Architecture
 
An Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL RepositoriesAn Approach for RDF-based Semantic Access to NoSQL Repositories
An Approach for RDF-based Semantic Access to NoSQL Repositories
 
Survey on NoSQL integration
Survey on NoSQL integrationSurvey on NoSQL integration
Survey on NoSQL integration
 
Exploiting the query structure for efficient join ordering in SPARQL queries
Exploiting the query structure for efficient join ordering in SPARQL queriesExploiting the query structure for efficient join ordering in SPARQL queries
Exploiting the query structure for efficient join ordering in SPARQL queries
 
Smart Crawler
Smart CrawlerSmart Crawler
Smart Crawler
 
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação Ubíqua
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação UbíquaADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação Ubíqua
ADeSCoU: Uma Abordagem para o Desenvolvimento de Software na Computação Ubíqua
 

Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma aplicação de redes sociais

  • 1. Globalcode – Open4education Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma aplicação de redes sociais Luiz Henrique Zambom Santana lhzsantana@gmail.com
  • 2. Globalcode – Open4education Agenda Apresentação e introdução Histórico: MapReduce e Hadoop Buzz atual sobre Spark e Elasticsearch Visão geral do Spark e GraphX Visão geral do Elasticsearch 2.0 Arquitetura Lambda Aplicação de Redes Sociais Código Conclusões
  • 3. Globalcode – Open4education Apresentação Doutorando na UFSC Consultor e programador freelancer Trabalhando com Elasticsearch desde 2013 (versão 0.9.x) Trabalhando com Spark desde o começo de 2015 Autor de artigos, Blog (luizsantana.info) e livros
  • 4. Globalcode – Open4education Big Data na minha visão Sempre esteve por aí “Mais dados que a computação atual pode suportar” Roger Magoulas, em 2005. Será que ainda é válido? Sim (!), o desafio atual é deixar a Big Data mais fácil e barata Parte de uma onda que também inclui Cloud Computing e Lean Startup, tentando lidar com a complexidade do desenvolvimento de software atual Uma infinidade de ferramentas Processamento: Hadoop, Spark, Storm, Mahout.. Armazenamento: Cassandra, MongoDB... Cache: Redis, Memcache... Integração: Kafka, RabitMQ, Logstash... Análise: R, Spark, Mahout... Visualização: Kibana, Tableau... ...
  • 6. Globalcode – Open4education No começo era: MapReduce e Hadoop MapReduce Criado e usado pelo Google, publicado em 2004 Apesar das críticas (especialmente do Stonebraker) Preocupado com Vasão Motivou ou influenciou a criação de muitas ferramentas que conhecemos (MongoDB e Hadoop) ou estamos nos conhecendo (Elasticsearch) Problema: nós – usuários - ficamos mal acostumados Queremos baixa Latência e Tempo-real
  • 7. Globalcode – Open4education Qual é o problema? 100 ms 150 ms 200 ms
  • 8. Globalcode – Open4education NoSQL é a realidade Sadalage e Fowler, 2012 (http://martinfowler.com/books/nosql.html) Not only SQL Nathan Marz, 2014 (http://www.slideshare.net/nathanmarz/runaway-complexity-in-big-data-and-a-plan-to-stop-it) Relational databases will be a footnote in history
  • 9. Globalcode – Open4education Buzz atual sobre Spark e Elasticsearch
  • 10. Globalcode – Open4education Visão geral do Apache Spark Desenvolvido na Universidade da Califórnia em Berkley, no AmpLab Principalmente durante a tese de doutorado do Prof. Dr. Matei Zaharia orientado pelo Prof. Dr. Ion Stoica No ano passado foi fundada a Databricks Oferece: Processamento de uma grande quantidade de dados com baixa latência Uma grande quantidade de ferramentas para transformações e análises
  • 11. Globalcode – Open4education Comparação com o Hadoop Dados em memória principal 100x mais rápido em memória principal 10x mais rápido em disco Menor número de máquinas = Mais barato Muito mais fácil de usar Um conjunto completo de ferramentas
  • 12. Globalcode – Open4education Resilient Distributed Data (RDD) Principal abstração do Spark Para mais detalhe ver a tese de doutorado do Matei Zaharia Fornecem uma abstração de memória compartilhada Com o RDDs o Spark é capaz de realizar transformações em paralelo (potencialmente,sobre parte do conjunto de dados)
  • 14. Globalcode – Open4education GraphX Ferramenta para Grafos Distribuição de Grafos no RDD Implementação de algoritmos como: PageRank Subgrafo Elementos conectados Contagem de triângulos
  • 15. Globalcode – Open4education Resilient Distributed Data (RDD) Principal abstração do Spark Para mais detalhe ver a tese de doutorado do Matei Zaharia Fornecem uma abstração de memória compartilhada Com o RDDs o Spark é capaz de realizar transformações em paralelo (potencialmente,sobre parte do conjunto de dados)
  • 17. Globalcode – Open4education Visão geral do Elasticsearch Desenvolvido pelo israelense Shay Banon desde de 2010 Até 2014 um projeto open-source, quando foi criada a Elastic Oferece: Grande poder de buscas, usando o Apache Lucene Alta escalabidade Um ambiente completo com o ELK, Watcher, Shield e Marvel
  • 18. Globalcode – Open4education Elasticsearch 2.0 Já pode ser testado: https://www.elastic.co/downloads/past- releases/elasticsearch-2-0-0-beta1 Existe o plugin de migração: https://github.com/elastic/elasticsearch-migration Breaking changes in 2.0: https://www.elastic.co/guide/en/elasticsearch/reference/2 .0/breaking-changes-2.0.html
  • 19. Globalcode – Open4education Elasticsearch 2.0 As principais: Uso do Lucene 5 Pipeline de agregações Unificação de query/filter Compressão Lucene 5 Resultado: mais dados em cache e em disco Rivers já não existem! Use o Logstash ou a API de bulk para enviar dados MVEL foi substituído por Groovy
  • 20. Globalcode – Open4education Elasticsearch 2.0 Prefixo de tipo foi removido O que era assim: GET my_index/_search { "query": { "match": { "my_type.some_field": "quick brown fox" } } } No 2.0 vai ser feito da seguinte forma: GET my_index/my_type/_search { "query": { "match": { "some_field": "quick brown fox" } } }
  • 21. Globalcode – Open4education Elasticsearch 2.0 Outras mudanças importantes: API Java Configurações Mudanças no Parent/Child
  • 23. Globalcode – Open4education Aplicação Parte de uma aplicação maior, que realiza análise de sentimento na rede de contatos Dados do Twitter, coletados com o Twitter4J Funcionalidade: Ordenar os resultados da busca no Elasticsearch usando a importância do usuário para a rede social (Page Rank) Palavras-chave: Java, Scala, Maven, Eclipse, Twitter4J, Elasticsearch, Spark, GraphX e Cassandra
  • 24. Globalcode – Open4education Arquitetura da aplicação Speed Layer Indexa usuários Calcula PageRank e Salva usuários Batch e Serving Layers Buscas e agregações Views
  • 25. Globalcode – Open4education Ambiente de desenvolvimento Eclipse Scala IDE Maven Instalar Spark Instalar Elasticsearch
  • 26. Globalcode – Open4education Código - Maven Importante: vou pular as partes óbvias https://github.com/lhzsantana/tdc-graphx-elasticsearch Criar um projeto Maven no Eclipse Maven: <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-graphx_2.10</artifactId> <version>1.5.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.0.0-beta2</version> </dependency>
  • 27. Globalcode – Open4education Código - Twitter4J e Cassandra Meramente auxiliares: <dependency> <groupId>org.twitter4j</groupId> <artifactId>twitter4j-core</artifactId> <version>4.0.4</version> </dependency> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.0.0-alpha3</version> </dependency>
  • 28. Globalcode – Open4education Código – Recupera seguidores ConfigurationBuilder configurationBuilder = null; Twitter twitter = null; public TwitterReader(..) { configurationBuilder = new ConfigurationBuilder(); configurationBuilder.setOAuthAccessToken(accessToken) .setOAuthAccessTokenSecret(secretToken) .setOAuthConsumerKey(consumerKey) .setOAuthConsumerSecret(consumerSecret); twitter = new TwitterFactory(configurationBuilder.build()).getInstance(); } public PagableResponseList<User> getSeguidores(String nome) throws TwitterException { return twitter.getFollowersList(nome, 0); }
  • 29. Globalcode – Open4education Código – Spark Context Scala
  • 30. Globalcode – Open4education Código – Criar grafo Scala
  • 32. Globalcode – Open4education Código – Calcular PageRank
  • 33. Globalcode – Open4education Código – Elasticsearch Mapeamento
  • 34. Globalcode – Open4education Código – Elasticsearch Busca - Unificação de query/filter Pipeline de agregações
  • 35. Globalcode – Open4education Código – Pipeline de agregações Agregar 1. Os usuários de acordo com seus seguidores 2. Os usuários em faixas de acordo com seu pagerank https://www.elastic.co/guide/ en/elasticsearch/reference/ master/search- aggregations-pipeline.html
  • 36. Globalcode – Open4education Código – query/filter Buscar usuários de acordo com seus seguidores:
  • 37. Globalcode – Open4education Execução Iniciar Cassandra Iniciar Elasticsearch bin/elasticsearch Iniciar Spark binspark-class.cmd org.apache.spark.deploy.master.Master Vá em http://localhost:8080/ e veja qual é o endereço do master (geralmente spark://<IP>:7077). binspark-class.cmd org.apache.spark.deploy.worker.Worker spark://<IP>:7077
  • 39. Globalcode – Open4education Melhorias Usar Kafka para Sistema de mensagens como publish-subscribe Usar Ignite Para controle de transações Usar o streaming do Twitter http://twitter4j.org/javadoc/twitter4j/TwitterStream.html
  • 40. Globalcode – Open4education Conclusões Uma arquitetura ótima teria também outros componentes, como Redis, Kafka, Ignite, MongoDB... E outros Opinião: Dificilmente o Hadoop vai alcançar o Spark em nível de abstração e facilidade de uso O Spark, GraphX e o Elasticsearch permitem um novo nível de solução Tempo-real, análise e busca Arquitetura Lamba facilita a organização das ferramentas
  • 41. Globalcode – Open4education Conselho Acompanhe os arquivos do curso do Matei Zaharia no MIT: 6.S897: Large-Scale Systems http://people.csail.mit.edu/matei/courses/2015/6.S897/
  • 42. Globalcode – Open4education O que ver mais? Spark: MLlib Streaming R Elasticsearch: Kibana Logstash
  • 43. Globalcode – Open4education Obrigado! Em breve: RS Data Science Meetup http://www.meetup.com/pt/RS-Data-Science-Meetup/ 7/10/2015 Artigo na Java Magazine 144: Apache Spark: Como criar um mecanismo de sugestão de produtos Filtragem colaborativa Entre 12 e 16 de Outubro Artigo DevMedia com o código completo: http://www.devmedia.com.br/space/luiz-henrique-zambom-santana Apresentação no WebMedia: http://webmedia.icomp.ufam.edu.br/index.php/presentation/accepted- papers
  • 44. Globalcode – Open4education Referências Ótima apresentação sobre GraphX http://stanford.edu/~rezab/nips2014workshop/slides/ank ur.pdf Tese de doutorado do Matei Zaharia https://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EE CS-2014-12.html

Editor's Notes

  1. Pedir atenção