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

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

  • 1.
    Globalcode – Open4education Instanciandoa 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çãoe 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 Doutorandona 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 BigData 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... ...
  • 5.
  • 6.
    Globalcode – Open4education Nocomeç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 Buzzatual sobre Spark e Elasticsearch
  • 10.
    Globalcode – Open4education Visãogeral 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çãocom 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 ResilientDistributed 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)
  • 13.
  • 14.
    Globalcode – Open4education GraphX Ferramentapara Grafos Distribuição de Grafos no RDD Implementação de algoritmos como: PageRank Subgrafo Elementos conectados Contagem de triângulos
  • 15.
    Globalcode – Open4education ResilientDistributed 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)
  • 16.
  • 17.
    Globalcode – Open4education Visãogeral 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 Elasticsearch2.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 Elasticsearch2.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 Elasticsearch2.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 Elasticsearch2.0 Outras mudanças importantes: API Java Configurações Mudanças no Parent/Child
  • 22.
  • 23.
    Globalcode – Open4education Aplicação Partede 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 Arquiteturada 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 Ambientede 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.
  • 30.
  • 31.
  • 32.
  • 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 IniciarCassandra 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
  • 38.
  • 39.
    Globalcode – Open4education Melhorias UsarKafka 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 Umaarquitetura ó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 Acompanheos 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 Oque ver mais? Spark: MLlib Streaming R Elasticsearch: Kibana Logstash
  • 43.
    Globalcode – Open4education Obrigado! Embreve: 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 Ótimaapresentaçã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

Notas do Editor

  • #8 Pedir atenção