instanciando a arquitetura lambda com graphx e elasticsearch 2.0 em uma aplicação de redes...
TRANSCRIPT
Globalcode – Open4education
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0
em uma aplicação de redes sociais
Luiz Henrique Zambom [email protected]
Globalcode – Open4education
Agenda
Apresentação e introduçãoHistórico: MapReduce e HadoopBuzz atual sobre Spark e ElasticsearchVisão geral do Spark e GraphXVisão geral do Elasticsearch 2.0Arquitetura LambdaAplicação de Redes SociaisCódigoConclusões
Globalcode – Open4education
ApresentaçãoDoutorando na UFSCConsultor e programador freelancerTrabalhando com Elasticsearch desde 2013 (versão 0.9.x)Trabalhando com Spark desde o começo de 2015Autor de artigos, Blog (luizsantana.info) e livros
Globalcode – Open4education
Big Data na minha visãoSempre 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 barataParte 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 ferramentasProcessamento: 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
MapReduceCriado e usado pelo Google, publicado em 2004Apesar 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 acostumadosQueremos 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 AmpLabPrincipalmente durante a tese de doutorado do Prof. Dr. Matei Zaharia orientado pelo Prof. Dr. Ion StoicaNo ano passado foi fundada a DatabricksOferece:
Processamento de uma grande quantidade de dados com baixa latênciaUma grande quantidade de ferramentas para transformações e análises
Globalcode – Open4education
Comparação com o Hadoop
Dados em memória principal100x mais rápido em memória principal10x mais rápido em discoMenor número de máquinas = Mais barato
Muito mais fácil de usarUm conjunto completo de ferramentas
Globalcode – Open4education
Resilient Distributed Data (RDD)
Principal abstração do SparkPara mais detalhe ver a tese de doutorado do Matei ZahariaFornecem uma abstração de memória compartilhadaCom 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 GrafosDistribuição de Grafos no RDDImplementação de algoritmos como:
PageRankSubgrafoElementos conectadosContagem de triângulos
Globalcode – Open4education
Resilient Distributed Data (RDD)
Principal abstração do SparkPara mais detalhe ver a tese de doutorado do Matei ZahariaFornecem uma abstração de memória compartilhadaCom 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 2010Até 2014 um projeto open-source, quando foi criada a ElasticOferece:
Grande poder de buscas, usando o Apache LuceneAlta escalabidadeUm 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 5Pipeline de agregaçõesUnificação de query/filterCompressão
Lucene 5Resultado: mais dados em cache e em disco
Rivers já não existem! Use o Logstash ou a API de bulk para enviar dadosMVEL foi substituído por Groovy
Globalcode – Open4education
Elasticsearch 2.0Prefixo de tipo foi removidoO 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 JavaConfiguraçõesMudanç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 contatosDados do Twitter, coletados com o Twitter4JFuncionalidade:
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çãoSpeed LayerIndexa usuários
Calcula PageRank e Salva usuários
Batch e Serving Layers
Buscas e agregaçõesViews
Globalcode – Open4education
Ambiente de desenvolvimento
EclipseScala IDE
MavenInstalar SparkInstalar Elasticsearch
Globalcode – Open4education
Código - Maven
Importante: vou pular as partes óbviashttps://github.com/lhzsantana/tdc-graphx-elasticsearch
Criar um projeto Maven no EclipseMaven:
<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/filterPipeline de agregações
Globalcode – Open4education
Código – Pipeline de agregações
Agregar1. Os usuários de acordo com seus seguidores2. 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 CassandraIniciar Elasticsearch
bin/elasticsearch
Iniciar Sparkbin\spark-class.cmd org.apache.spark.deploy.master.MasterVá em http://localhost:8080/ e veja qual é o endereço do master (geralmente spark://<IP>:7077).bin\spark-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 IgnitePara controle de transações
Usar o streaming do Twitterhttp://twitter4j.org/javadoc/twitter4j/TwitterStream.html
Globalcode – Open4education
Conclusões
Uma arquitetura ótima teria também outros componentes, como Redis, Kafka, Ignite, MongoDB... E outrosOpinião: Dificilmente o Hadoop vai alcançar o Spark em nível de abstração e facilidade de usoO 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 Systemshttp://people.csail.mit.edu/matei/courses/2015/6.S897/
Globalcode – Open4education
O que ver mais?
Spark:MLlibStreamingR
Elasticsearch:KibanaLogstash
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 produtosFiltragem colaborativaEntre 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 GraphXhttp://stanford.edu/~rezab/nips2014workshop/slides/ankur.pdf
Tese de doutorado do Matei Zahariahttps://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.html