instanciando a arquitetura lambda com graphx e elasticsearch 2.0 em uma aplicação de redes...

44
Globalcode – Open4education Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma aplicação de redes sociais Luiz Henrique Zambom Santana [email protected]

Upload: luiz-henrique-zambom-santana

Post on 13-Feb-2017

470 views

Category:

Technology


0 download

TRANSCRIPT

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

Globalcode – Open4education

Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0

em uma aplicação de redes sociais

Luiz Henrique Zambom [email protected]

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

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

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

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

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

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......

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

Globalcode – Open4education

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

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

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

Globalcode – Open4education

Qual é o problema?

100 ms

150 ms

200 ms

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

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

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

Globalcode – Open4education

Buzz atual sobre Spark e Elasticsearch

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

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

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

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

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

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)

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

Globalcode – Open4education

Spark e GraphX

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

Globalcode – Open4education

GraphX

Ferramenta para GrafosDistribuição de Grafos no RDDImplementação de algoritmos como:

PageRankSubgrafoElementos conectadosContagem de triângulos

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

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)

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

Globalcode – Open4education

RDD no GraphX

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

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

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

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

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

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

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

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" } }}

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

Globalcode – Open4education

Elasticsearch 2.0

Outras mudanças importantes:API JavaConfiguraçõesMudanças no Parent/Child

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

Globalcode – Open4education

Arquitetura Lambda

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

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

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

Globalcode – Open4education

Arquitetura da aplicaçãoSpeed LayerIndexa usuários

Calcula PageRank e Salva usuários

Batch e Serving Layers

Buscas e agregaçõesViews

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

Globalcode – Open4education

Ambiente de desenvolvimento

EclipseScala IDE

MavenInstalar SparkInstalar Elasticsearch

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

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>

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

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>

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

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);

}

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

Globalcode – Open4education

Código – Spark Context

Scala

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

Globalcode – Open4education

Código – Criar grafo

Scala

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

Globalcode – Open4education

Código – Armazenar grafo

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

Globalcode – Open4education

Código – Calcular PageRank

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

Globalcode – Open4education

Código – Elasticsearch

Mapeamento

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

Globalcode – Open4education

Código – Elasticsearch

Busca - Unificação de query/filterPipeline de agregações

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

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

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

Globalcode – Open4education

Código – query/filter

Buscar usuários de acordo com seus seguidores:

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

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

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

Globalcode – Open4education

Execução

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

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

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

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

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

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/

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

Globalcode – Open4education

O que ver mais?

Spark:MLlibStreamingR

Elasticsearch:KibanaLogstash

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

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

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

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