SlideShare uma empresa Scribd logo
Exemplos de Uso de
Apache Spark usando AWS
Elastic MapReduce
AWS Meetup Rio - April 2016
Felipe Almeida (falmeida1988@gmail.com | queirozf.com)
Project url: https://github.com/queirozfcom/aws-meetup-april-2016
Estrutura da palestra
● Introdução Spark
● Introdução EMR
● Casos de uso comuns do EMR
● Criação de um cluster no EMR
● Casos de uso Spark (batch)
● Exemplo para rodar no EMR
● Casos de uso Spark (streaming)
● Exemplo para rodar no EMR
2
Introdução Spark
3
Introdução Spark
● Ferramenta para processamento de dados distribuídos em
memória, feita na linguagem Scala
4
Introdução Spark
● Ferramenta para processamento de dados distribuídos em
memória, feita na linguagem Scala
● Começou como uma alternativa ao Hadoop MapReduce, atacando
duas áreas principais, consideradas fraquezas do MapReduce:
○ Processamento iterativo (várias tarefas em sequência)
○ Processamento interativo (análise exploratória de dados)
5
Introdução Spark
● Ferramenta para processamento de dados distribuídos em
memória, feita na linguagem Scala
6
Este pequeno pedaço de código lê um arquivo texto do HDFS e
executa uma contagem de palavras no mesmo, de forma
distribuída
Introdução Spark
● Ferramenta para processamento de dados distribuídos em
memória, feita na linguagem Scala
7
Diferença no tempo de execução de duas tarefas de regressão
logística (um algoritmo de aprendizado de máquina) em Hadoop
MapReduce e Spark
Este pequeno pedaço de código lê um arquivo texto do HDFS e
executa uma contagem de palavras no mesmo, de forma
distribuída
Introdução Spark
● Atualmente (versão 1.6.1), o Spark:
○ Pode fazer quaisquer operações do tipo map/reduce
○ Tem módulo para tarefas de aprendizado de máquina
○ Tem módulo para processamento de streams de dados
○ Tem módulo para análise de dados com DataFrames, como
em R, Pandas (python) e similares
○ etc.
8
Introdução Spark
● Atualmente (versão 1.6.1), o Spark:
○ Pode fazer quaisquer operações do tipo map/reduce
○ Tem módulo para tarefas de aprendizado de máquina
○ Tem módulo para processamento de streams de dados
○ Tem módulo para análise de dados com DataFrames, como
em R, Pandas (python) e similares
○ etc.
● Tudo isso
○ de forma distribuída, em memória
○ com APIs amigáveis, em Scala, Java, Python e também R.
9
Introdução Spark
Há dois modos principais de execução:
● Batch
○ Você inicia o processamento de um arquivo ou dataset finito, o
Spark processa a(s) tarefa(s) configurada(s) e pára.
10
Introdução Spark
Há dois modos principais de execução
● Batch
○ Você inicia o processamento de um arquivo ou dataset finito, o
Spark processa a(s) tarefa(s) configurada(s) e pára.
● Streaming
○ Você processa um stream de dados contínuo; a execução não
pára até que haja algum erro ou você termine a aplicação
manualmente.
11
Introdução EMR
12
Introdução EMR
O AWS Elastic MapReduce (EMR) é um serviço gerenciado de clusters
Hadoop
● O AWS EMR também dá suporte ao Spark (desde 2015)
● O EMR é acessível pelo console AWS:
13
Detalhe: console AWS
Introdução EMR
Importante: Há dois modos de execução de clusters EMR.
● Cluster mode
○ Após a criação, o cluster só é desligado manualmente ou se
houver um erro
14
Introdução EMR
Importante: Há dois modos de execução de clusters EMR.
● Cluster mode
○ Após a criação, o cluster só é desligado manualmente ou se
houver um erro
● Step execution (ou autotermination)
○ Após a criação, o cluster executa as tarefas que você
configurou e é desligado automaticamente:
15
Escolha do modo de execução
Introdução EMR
Obs: Há também uma ferramenta de linha de comando (CLI) que lhe
permite fazer todas as ações que foram feitas pelo console da AWS.
16
Introdução EMR
Obs: Há também uma ferramenta de linha de comando (CLI) que lhe
permite fazer todas as ações que foram feitas pelo console da AWS:
Alguns comandos disponíveis:
● create-cluster
● add-steps
● list-clusters
● install-applications
● ssh
(Veja todos os comandos disponíveis neste neste link)
17
Casos de uso comuns do EMR
18
Casos de uso comuns do EMR
● Terceirizar custo e expertise de criação e manutenção de um
cluster (com dezenas ou até centenas de máquinas) para a AWS
19
Casos de uso comuns do EMR
● Terceirizar custo e expertise de criação e manutenção de um
cluster (com dezenas ou até centenas de máquinas) para a AWS
● Executar jobs esporádicos sem a necessidade de possuir um
cluster
○ No modo step execution, você só paga o tempo que a tarefa
está sendo executada
20
Casos de uso comuns do EMR
● Terceirizar custo e expertise de criação e manutenção de um
cluster (com dezenas ou até centenas de máquinas) para a AWS
● Executar jobs esporádicos sem a necessidade de possuir um
cluster
○ No modo step execution, você só paga o tempo que a tarefa
está sendo executada
● Conectar serviços da AWS, e.g. S3, Kinesis, DynamoDB.
21
Criação de um cluster no EMR
Na hora de criar um cluster, é bom se lembrar de algumas
coisas
22
Criação de um cluster no EMR
● O Spark não é incluído por default nos clusters. É preciso marcar a
opção correta:
23
Na tela de criação de cluster, selecione a opção que inclui o Spark
Criação de um cluster no EMR
● Se você quiser ter acesso à interface de administração do Spark e
do YARN, é necessário criar o cluster usando uma chave de
autenticação:
24
Opcionalmente, escolha uma chave de acesso que você tenha criado
Casos de uso Spark Batch
25
Casos de uso Spark Batch
● Análise exploratória de grandes conjuntos de dados
26
Casos de uso Spark Batch
● Análise exploratória de grandes conjuntos de dados
● Fazer Data Warehousing em cima de um grande conjunto de
dados, estilo OLAP
27
Casos de uso Spark Batch
● Análise exploratória de grandes conjuntos de dados
● Fazer Data Warehousing em cima de um grande conjunto de
dados, estilo OLAP
● Treinar um modelo de aprendizado de máquina sobre um grande
conjunto de dados
28
Casos de uso Spark Batch
● Análise exploratória de grandes conjuntos de dados
● Fazer Data Warehousing em cima de um grande conjunto de
dados, estilo OLAP
● Treinar um modelo de aprendizado de máquina sobre um grande
conjunto de dados
● Qualquer tarefa de analytics que antes era feita via Hadoop
MapReduce
29
Exemplo Execução Spark Batch no EMR
30
Exemplo Execução Spark Batch no EMR
As etapas para ter uma tarefa Spark Batch rodando no AWS EMR são:
● Escrita do código e empacotamento do mesmo em um JAR (Java
Archive File)
● Upload dos dados que serão analisados para o S3
● Upload do código (JAR) para o S3
● Criação do cluster em modo step, ou autotermination, configurado
para rodar o seu código
● Esperar o cluster subir e seu job completar
● Em caso de sucesso, pegar o resultado do seu job, caso tenha
sido salvo em algum meio externo (e.g. S3)
31
Exemplo Execução Spark Batch no EMR
O código de exemplo é o seguinte:
● Ler um arquivo em formato texto do S3 (tão grande quanto se
queira)
● Calcular, de forma distribuída, o número de palavras no arquivo
● Salvar o resultado (ou seja, o número de vezes que cada palavra
ocorre no arquivo inteiro) em outro bucket do S3
32
Exemplo Execução Spark Batch no EMR
Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup)
object WordCount{
def main(args:Array[String]){
if(args.length < 1){
System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>")
System.exit(1)
}
val inputDir = args(0)
val outputDir = args(1)
val cnf = new SparkConf().setAppName("Spark Distributed WordCount")
val sc = new SparkContext(cnf)
val textFile = sc.textFile(inputDir)
val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b )
counts.saveAsTextFile(outputDir)
sc.stop()
}
}
33
Exemplo Execução Spark Batch no EMR
Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup)
object WordCount{
def main(args:Array[String]){
if(args.length < 1){
System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>")
System.exit(1)
}
val inputDir = args(0)
val outputDir = args(1)
val cnf = new SparkConf().setAppName("Spark Distributed WordCount")
val sc = new SparkContext(cnf)
val textFile = sc.textFile(inputDir)
val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b )
counts.saveAsTextFile(outputDir)
sc.stop()
}
}
34
O endereço do bucket
de input e de output
são parâmetros do job
Exemplo Execução Spark Batch no EMR
Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup)
object WordCount{
def main(args:Array[String]){
if(args.length < 1){
System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>")
System.exit(1)
}
val inputDir = args(0)
val outputDir = args(1)
val cnf = new SparkConf().setAppName("Spark Distributed WordCount")
val sc = new SparkContext(cnf)
val textFile = sc.textFile(inputDir)
val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b )
counts.saveAsTextFile(outputDir)
sc.stop()
}
}
35
Leitura do arquivo do
S3
Exemplo Execução Spark Batch no EMR
Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup)
object WordCount{
def main(args:Array[String]){
if(args.length < 1){
System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>")
System.exit(1)
}
val inputDir = args(0)
val outputDir = args(1)
val cnf = new SparkConf().setAppName("Spark Distributed WordCount")
val sc = new SparkContext(cnf)
val textFile = sc.textFile(inputDir)
val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b )
counts.saveAsTextFile(outputDir)
sc.stop()
}
}
36
Essa linha faz todo o
processamento distribuído:
a partição do arquivo,
contagem de palavras e a
agregação
Exemplo Execução Spark Batch no EMR
Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup)
object WordCount{
def main(args:Array[String]){
if(args.length < 1){
System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>")
System.exit(1)
}
val inputDir = args(0)
val outputDir = args(1)
val cnf = new SparkConf().setAppName("Spark Distributed WordCount")
val sc = new SparkContext(cnf)
val textFile = sc.textFile(inputDir)
val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b )
counts.saveAsTextFile(outputDir)
sc.stop()
}
}
37
O resultado do
processamento é salvo no
bucket S3 de destino
Exemplo Execução Spark Batch no EMR
38
Enquanto a tarefa está sendo executada, ela aparece assim
Exemplo Execução Spark Batch no EMR
39
Se ela foi completada sem erros, ela aparece assim
Casos de uso Spark Streaming
40
Casos de uso Spark Streaming
● Monitoramento de ativos, serviços
41
Casos de uso Spark Streaming
● Monitoramento de ativos, serviços
● Processamento de eventos em tempo real para alimentação de
dashboards
42
Casos de uso Spark Streaming
● Monitoramento de ativos, serviços
● Processamento de eventos em tempo real para alimentação de
dashboards
● Processamento de dados vindos de serviços como
○ AWS Kinesis
○ Apache Kafka
○ Apache Flume
○ Twitter
○ ZeroMQ
○ MQTT
43
Casos de uso Spark Streaming
● Monitoramento de ativos, serviços
● Processamento de eventos em tempo real para alimentação de
dashboards
● Processamento de dados vindos de serviços como
○ AWS Kinesis
○ Apache Kafka
○ Apache Flume
○ Twitter
○ ZeroMQ
○ MQTT
44
Há clientes oficiais do Spark
para todos esses serviços!
Exemplo de Execução Spark Streaming no EMR
45
Exemplo de Execução Spark Streaming no EMR
As etapas para ter uma tarefa Spark Streaming rodando no AWS EMR
são:
● Criação do cluster em modo cluster
● Escrita do código e empacotamento do mesmo em um JAR (Java
Archive File)
● Upload do código (JAR) para o S3
● Adição do seu job no cluster
● Caso não tenha havido erro na inicialização, a aplicação vai ficar
rodando até haver algum erro ou ela ser finalizada manualmente.
46
Exemplo de Execução Spark Streaming no EMR
As etapas para ter uma tarefa Spark Streaming rodando no AWS EMR
são:
● Criação do cluster em modo cluster
● Escrita do código e empacotamento do mesmo em um JAR (Java
Archive File)
● Upload do código (JAR) para o S3
● Adição do seu job no cluster
● Caso não tenha havido erro na inicialização, a aplicação vai ficar
rodando até haver algum erro ou ela ser finalizada manualmente.
47
Note que, neste caso,
o cluster é criado
antes do envio do job
Exemplo de Execução Spark Streaming no EMR
● Exemplo: contar quantos tweets em português são criados a cada 10
segundos: (disponível em http://bit.do/spark-streaming-example-aws-meetup)
val config = new SparkConf().setAppName("aws-meetup-rio-2016-streaming")
val ssc = new StreamingContext(config,batchDuration)
val twitterConf = new ConfigurationBuilder()
twitterConf.setOAuthAccessToken(accessToken)
twitterConf.setOAuthAccessTokenSecret(accessTokenSecret)
twitterConf.setOAuthConsumerKey(apiKey)
twitterConf.setOAuthConsumerSecret(apiSecret)
val auth = AuthorizationFactory.getInstance(twitterConf.build())
val tweets = TwitterUtils.createStream(ssc,Some(auth))
val portuguesetweets = tweets.map(status => status.getLang) .filter(lang => lang == "pt" )
portuguesetweets.count().print()
ssc.start()
48
Exemplo de Execução Spark Streaming no EMR
● Exemplo: contar quantos tweets em português são criados a cada 10
segundos: (disponível em http://bit.do/spark-streaming-example-aws-meetup)
val config = new SparkConf().setAppName("aws-meetup-rio-2016-streaming")
val ssc = new StreamingContext(config,batchDuration)
val twitterConf = new ConfigurationBuilder()
twitterConf.setOAuthAccessToken(accessToken)
twitterConf.setOAuthAccessTokenSecret(accessTokenSecret)
twitterConf.setOAuthConsumerKey(apiKey)
twitterConf.setOAuthConsumerSecret(apiSecret)
val auth = AuthorizationFactory.getInstance(twitterConf.build())
val tweets = TwitterUtils.createStream(ssc,Some(auth))
val portuguesetweets = tweets.map(status => status.getLang).filter(lang => lang == "pt" )
portuguesetweets.count().print()
ssc.start()
49
Criação do
stream twitter
Filtragem pelo
idioma (“pt”)
Agregação (count) e impressão na saída padrão
Exemplo de Execução Spark Streaming no EMR
● O resultado é impresso na saída padrão:
50
Podemos ver telas de
logs, saída padrão e
erro do YARN no EMR
Exemplo de Execução Spark Streaming no EMR
51
Detalhe: na interface Spark UI (também acessível pelo EMR) é possível ver
que a tarefa está sendo executada sem erros até o momento

Mais conteúdo relacionado

Mais procurados (20)

PDF
Modelos de computação distribuída no Hadoop
Big Data Week São Paulo
 
PDF
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
Eiti Kimura
 
PPTX
Deep dive de Amazon DynamoDB
Amazon Web Services LATAM
 
PDF
Arquitetura do Framework Apache Hadoop 2.6
Felipe Schimith Batista
 
PDF
Mongodb: agregação
Luciano Ramalho
 
PDF
Bancos de dados analíticos open source
Matheus Espanhol
 
PDF
NoSQL: Uma análise crítica
pichiliani
 
PDF
Desenvolvendo Aplicações baseadas em Big Data com PySpark
Vinícius Barros
 
PDF
[Webinar] Performance e otimização de banco de dados MySQL
KingHost - Hospedagem de sites
 
PPTX
Quais são as opções de banco de dados gerenciados na AWS?
Amazon Web Services LATAM
 
PDF
Funcionalidades das versões 9.x do PostgreSQL
Matheus Espanhol
 
PPT
CouchDB Presentation
Bianca Caruso da Paixão
 
PDF
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
Eiti Kimura
 
PPTX
Machine learning com Apache Spark
Sandys Nunes
 
PDF
Amazon emr cluster hadoop pronto para usar na nuvem aws
Amazon Web Services LATAM
 
PDF
Pgquarrel
Euler Taveira
 
PDF
Apache CouchDB
Hugo Souza
 
PDF
Desmistificando Replicação no PostgreSQL
Euler Taveira
 
PDF
Big data para programadores convencionais
Roberto Oliveira
 
Modelos de computação distribuída no Hadoop
Big Data Week São Paulo
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
Eiti Kimura
 
Deep dive de Amazon DynamoDB
Amazon Web Services LATAM
 
Arquitetura do Framework Apache Hadoop 2.6
Felipe Schimith Batista
 
Mongodb: agregação
Luciano Ramalho
 
Bancos de dados analíticos open source
Matheus Espanhol
 
NoSQL: Uma análise crítica
pichiliani
 
Desenvolvendo Aplicações baseadas em Big Data com PySpark
Vinícius Barros
 
[Webinar] Performance e otimização de banco de dados MySQL
KingHost - Hospedagem de sites
 
Quais são as opções de banco de dados gerenciados na AWS?
Amazon Web Services LATAM
 
Funcionalidades das versões 9.x do PostgreSQL
Matheus Espanhol
 
CouchDB Presentation
Bianca Caruso da Paixão
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
Eiti Kimura
 
Machine learning com Apache Spark
Sandys Nunes
 
Amazon emr cluster hadoop pronto para usar na nuvem aws
Amazon Web Services LATAM
 
Pgquarrel
Euler Taveira
 
Apache CouchDB
Hugo Souza
 
Desmistificando Replicação no PostgreSQL
Euler Taveira
 
Big data para programadores convencionais
Roberto Oliveira
 

Semelhante a Exemplos de uso de apache spark usando aws elastic map reduce (20)

PDF
Seu primeiro aplicativo de Big Data
Amazon Web Services LATAM
 
PPTX
Migrando seu workload de Big Data para o Amazon EMR
Amazon Web Services LATAM
 
PPTX
Os benefícios de migrar seus workloads de Big Data para a AWS
Amazon Web Services LATAM
 
PDF
AEL - Adaptive Execution Layer on Spark Cluster with Pentaho Data Integration
Ambiente Livre
 
PDF
Big Data - O que é o hadoop, map reduce, hdfs e hive
Flavio Fonte, PMP, ITIL
 
PPTX
Como construir sua primeira aplicação de Big Data na AWS
Amazon Web Services LATAM
 
PDF
IA/ML melhorando a saúde pública
Amazon Web Services LATAM
 
PPTX
AIML Reforçando a segurança virtual
Amazon Web Services LATAM
 
PPTX
Webinar: Introdução a Big data
Amazon Web Services LATAM
 
PDF
Construindo Data Lakes e Analytics na AWS
Amazon Web Services LATAM
 
PDF
[DEVFEST] Apache Spark Casos de Uso e Escalabilidade
Eiti Kimura
 
PDF
Apache Spark: Casos de uso e escalabilidade
Flavio Clesio
 
PDF
Arquitetura Serverless para Machine Learning
Felipe Santos
 
PPTX
Hadoop - Mãos à massa! Qcon2014
Thiago Santiago
 
PDF
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Ricardo Longa
 
PDF
Hadoop - Primeiros passos
Sensedia
 
PDF
Processamento em Big Data
Luiz Henrique Zambom Santana
 
PDF
Pipeline da Engenharia de Dados
Ederson Corbari
 
PDF
Samba Tech Analytics: Arquiteturas e tecnologias por trás da análise de vídeo...
Big Data Week São Paulo
 
Seu primeiro aplicativo de Big Data
Amazon Web Services LATAM
 
Migrando seu workload de Big Data para o Amazon EMR
Amazon Web Services LATAM
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Amazon Web Services LATAM
 
AEL - Adaptive Execution Layer on Spark Cluster with Pentaho Data Integration
Ambiente Livre
 
Big Data - O que é o hadoop, map reduce, hdfs e hive
Flavio Fonte, PMP, ITIL
 
Como construir sua primeira aplicação de Big Data na AWS
Amazon Web Services LATAM
 
IA/ML melhorando a saúde pública
Amazon Web Services LATAM
 
AIML Reforçando a segurança virtual
Amazon Web Services LATAM
 
Webinar: Introdução a Big data
Amazon Web Services LATAM
 
Construindo Data Lakes e Analytics na AWS
Amazon Web Services LATAM
 
[DEVFEST] Apache Spark Casos de Uso e Escalabilidade
Eiti Kimura
 
Apache Spark: Casos de uso e escalabilidade
Flavio Clesio
 
Arquitetura Serverless para Machine Learning
Felipe Santos
 
Hadoop - Mãos à massa! Qcon2014
Thiago Santiago
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Ricardo Longa
 
Hadoop - Primeiros passos
Sensedia
 
Processamento em Big Data
Luiz Henrique Zambom Santana
 
Pipeline da Engenharia de Dados
Ederson Corbari
 
Samba Tech Analytics: Arquiteturas e tecnologias por trás da análise de vídeo...
Big Data Week São Paulo
 
Anúncio

Mais de Felipe (17)

PDF
Aula rotulação automática - Automatic tagging
Felipe
 
PDF
First steps with Keras 2: A tutorial with Examples
Felipe
 
PDF
Word embeddings introdução, motivação e exemplos
Felipe
 
PDF
Cloud Certifications - Overview
Felipe
 
PDF
Elasticsearch for Data Analytics
Felipe
 
PDF
Cloudwatch: Monitoring your Services with Metrics and Alarms
Felipe
 
PDF
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Felipe
 
PDF
Online Machine Learning: introduction and examples
Felipe
 
PDF
Aws cost optimization: lessons learned, strategies, tips and tools
Felipe
 
PDF
Boas práticas no desenvolvimento de software
Felipe
 
PDF
Rachinations
Felipe
 
PDF
Ausgewählte preußische Tugenden
Felipe
 
PDF
Short intro to scala and the play framework
Felipe
 
PDF
Conceitos e exemplos em versionamento de código
Felipe
 
PDF
DevOps Series: Extending vagrant with Puppet for configuration management
Felipe
 
PDF
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
Felipe
 
PDF
D3.js 30-minute intro
Felipe
 
Aula rotulação automática - Automatic tagging
Felipe
 
First steps with Keras 2: A tutorial with Examples
Felipe
 
Word embeddings introdução, motivação e exemplos
Felipe
 
Cloud Certifications - Overview
Felipe
 
Elasticsearch for Data Analytics
Felipe
 
Cloudwatch: Monitoring your Services with Metrics and Alarms
Felipe
 
Cloudwatch: Monitoring your AWS services with Metrics and Alarms
Felipe
 
Online Machine Learning: introduction and examples
Felipe
 
Aws cost optimization: lessons learned, strategies, tips and tools
Felipe
 
Boas práticas no desenvolvimento de software
Felipe
 
Rachinations
Felipe
 
Ausgewählte preußische Tugenden
Felipe
 
Short intro to scala and the play framework
Felipe
 
Conceitos e exemplos em versionamento de código
Felipe
 
DevOps Series: Extending vagrant with Puppet for configuration management
Felipe
 
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
Felipe
 
D3.js 30-minute intro
Felipe
 
Anúncio

Último (6)

PDF
Aulas Extras - O que é e por que Aprender e Utilizar.pdf
fmartinsss
 
DOCX
150 PMBOK 7 Scenario-Based PMP Exam Questions and Answers.docx
Marcelo Cruz
 
PDF
Ceritificado Imersão SOC HackOne Sab/Dom.pdf
RodrigoMori7
 
PPTX
Windows 11 Apostila do Básico ao Avançado
deividcosimo1
 
PDF
Estudos DAC - projeto de arquitetura futurista
ra189223
 
PPTX
5 Critérios para seleção do objeto de estudo.pptx
Eduardo Corrêa
 
Aulas Extras - O que é e por que Aprender e Utilizar.pdf
fmartinsss
 
150 PMBOK 7 Scenario-Based PMP Exam Questions and Answers.docx
Marcelo Cruz
 
Ceritificado Imersão SOC HackOne Sab/Dom.pdf
RodrigoMori7
 
Windows 11 Apostila do Básico ao Avançado
deividcosimo1
 
Estudos DAC - projeto de arquitetura futurista
ra189223
 
5 Critérios para seleção do objeto de estudo.pptx
Eduardo Corrêa
 

Exemplos de uso de apache spark usando aws elastic map reduce

  • 1. Exemplos de Uso de Apache Spark usando AWS Elastic MapReduce AWS Meetup Rio - April 2016 Felipe Almeida ([email protected] | queirozf.com) Project url: https://github.com/queirozfcom/aws-meetup-april-2016
  • 2. Estrutura da palestra ● Introdução Spark ● Introdução EMR ● Casos de uso comuns do EMR ● Criação de um cluster no EMR ● Casos de uso Spark (batch) ● Exemplo para rodar no EMR ● Casos de uso Spark (streaming) ● Exemplo para rodar no EMR 2
  • 4. Introdução Spark ● Ferramenta para processamento de dados distribuídos em memória, feita na linguagem Scala 4
  • 5. Introdução Spark ● Ferramenta para processamento de dados distribuídos em memória, feita na linguagem Scala ● Começou como uma alternativa ao Hadoop MapReduce, atacando duas áreas principais, consideradas fraquezas do MapReduce: ○ Processamento iterativo (várias tarefas em sequência) ○ Processamento interativo (análise exploratória de dados) 5
  • 6. Introdução Spark ● Ferramenta para processamento de dados distribuídos em memória, feita na linguagem Scala 6 Este pequeno pedaço de código lê um arquivo texto do HDFS e executa uma contagem de palavras no mesmo, de forma distribuída
  • 7. Introdução Spark ● Ferramenta para processamento de dados distribuídos em memória, feita na linguagem Scala 7 Diferença no tempo de execução de duas tarefas de regressão logística (um algoritmo de aprendizado de máquina) em Hadoop MapReduce e Spark Este pequeno pedaço de código lê um arquivo texto do HDFS e executa uma contagem de palavras no mesmo, de forma distribuída
  • 8. Introdução Spark ● Atualmente (versão 1.6.1), o Spark: ○ Pode fazer quaisquer operações do tipo map/reduce ○ Tem módulo para tarefas de aprendizado de máquina ○ Tem módulo para processamento de streams de dados ○ Tem módulo para análise de dados com DataFrames, como em R, Pandas (python) e similares ○ etc. 8
  • 9. Introdução Spark ● Atualmente (versão 1.6.1), o Spark: ○ Pode fazer quaisquer operações do tipo map/reduce ○ Tem módulo para tarefas de aprendizado de máquina ○ Tem módulo para processamento de streams de dados ○ Tem módulo para análise de dados com DataFrames, como em R, Pandas (python) e similares ○ etc. ● Tudo isso ○ de forma distribuída, em memória ○ com APIs amigáveis, em Scala, Java, Python e também R. 9
  • 10. Introdução Spark Há dois modos principais de execução: ● Batch ○ Você inicia o processamento de um arquivo ou dataset finito, o Spark processa a(s) tarefa(s) configurada(s) e pára. 10
  • 11. Introdução Spark Há dois modos principais de execução ● Batch ○ Você inicia o processamento de um arquivo ou dataset finito, o Spark processa a(s) tarefa(s) configurada(s) e pára. ● Streaming ○ Você processa um stream de dados contínuo; a execução não pára até que haja algum erro ou você termine a aplicação manualmente. 11
  • 13. Introdução EMR O AWS Elastic MapReduce (EMR) é um serviço gerenciado de clusters Hadoop ● O AWS EMR também dá suporte ao Spark (desde 2015) ● O EMR é acessível pelo console AWS: 13 Detalhe: console AWS
  • 14. Introdução EMR Importante: Há dois modos de execução de clusters EMR. ● Cluster mode ○ Após a criação, o cluster só é desligado manualmente ou se houver um erro 14
  • 15. Introdução EMR Importante: Há dois modos de execução de clusters EMR. ● Cluster mode ○ Após a criação, o cluster só é desligado manualmente ou se houver um erro ● Step execution (ou autotermination) ○ Após a criação, o cluster executa as tarefas que você configurou e é desligado automaticamente: 15 Escolha do modo de execução
  • 16. Introdução EMR Obs: Há também uma ferramenta de linha de comando (CLI) que lhe permite fazer todas as ações que foram feitas pelo console da AWS. 16
  • 17. Introdução EMR Obs: Há também uma ferramenta de linha de comando (CLI) que lhe permite fazer todas as ações que foram feitas pelo console da AWS: Alguns comandos disponíveis: ● create-cluster ● add-steps ● list-clusters ● install-applications ● ssh (Veja todos os comandos disponíveis neste neste link) 17
  • 18. Casos de uso comuns do EMR 18
  • 19. Casos de uso comuns do EMR ● Terceirizar custo e expertise de criação e manutenção de um cluster (com dezenas ou até centenas de máquinas) para a AWS 19
  • 20. Casos de uso comuns do EMR ● Terceirizar custo e expertise de criação e manutenção de um cluster (com dezenas ou até centenas de máquinas) para a AWS ● Executar jobs esporádicos sem a necessidade de possuir um cluster ○ No modo step execution, você só paga o tempo que a tarefa está sendo executada 20
  • 21. Casos de uso comuns do EMR ● Terceirizar custo e expertise de criação e manutenção de um cluster (com dezenas ou até centenas de máquinas) para a AWS ● Executar jobs esporádicos sem a necessidade de possuir um cluster ○ No modo step execution, você só paga o tempo que a tarefa está sendo executada ● Conectar serviços da AWS, e.g. S3, Kinesis, DynamoDB. 21
  • 22. Criação de um cluster no EMR Na hora de criar um cluster, é bom se lembrar de algumas coisas 22
  • 23. Criação de um cluster no EMR ● O Spark não é incluído por default nos clusters. É preciso marcar a opção correta: 23 Na tela de criação de cluster, selecione a opção que inclui o Spark
  • 24. Criação de um cluster no EMR ● Se você quiser ter acesso à interface de administração do Spark e do YARN, é necessário criar o cluster usando uma chave de autenticação: 24 Opcionalmente, escolha uma chave de acesso que você tenha criado
  • 25. Casos de uso Spark Batch 25
  • 26. Casos de uso Spark Batch ● Análise exploratória de grandes conjuntos de dados 26
  • 27. Casos de uso Spark Batch ● Análise exploratória de grandes conjuntos de dados ● Fazer Data Warehousing em cima de um grande conjunto de dados, estilo OLAP 27
  • 28. Casos de uso Spark Batch ● Análise exploratória de grandes conjuntos de dados ● Fazer Data Warehousing em cima de um grande conjunto de dados, estilo OLAP ● Treinar um modelo de aprendizado de máquina sobre um grande conjunto de dados 28
  • 29. Casos de uso Spark Batch ● Análise exploratória de grandes conjuntos de dados ● Fazer Data Warehousing em cima de um grande conjunto de dados, estilo OLAP ● Treinar um modelo de aprendizado de máquina sobre um grande conjunto de dados ● Qualquer tarefa de analytics que antes era feita via Hadoop MapReduce 29
  • 30. Exemplo Execução Spark Batch no EMR 30
  • 31. Exemplo Execução Spark Batch no EMR As etapas para ter uma tarefa Spark Batch rodando no AWS EMR são: ● Escrita do código e empacotamento do mesmo em um JAR (Java Archive File) ● Upload dos dados que serão analisados para o S3 ● Upload do código (JAR) para o S3 ● Criação do cluster em modo step, ou autotermination, configurado para rodar o seu código ● Esperar o cluster subir e seu job completar ● Em caso de sucesso, pegar o resultado do seu job, caso tenha sido salvo em algum meio externo (e.g. S3) 31
  • 32. Exemplo Execução Spark Batch no EMR O código de exemplo é o seguinte: ● Ler um arquivo em formato texto do S3 (tão grande quanto se queira) ● Calcular, de forma distribuída, o número de palavras no arquivo ● Salvar o resultado (ou seja, o número de vezes que cada palavra ocorre no arquivo inteiro) em outro bucket do S3 32
  • 33. Exemplo Execução Spark Batch no EMR Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup) object WordCount{ def main(args:Array[String]){ if(args.length < 1){ System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>") System.exit(1) } val inputDir = args(0) val outputDir = args(1) val cnf = new SparkConf().setAppName("Spark Distributed WordCount") val sc = new SparkContext(cnf) val textFile = sc.textFile(inputDir) val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b ) counts.saveAsTextFile(outputDir) sc.stop() } } 33
  • 34. Exemplo Execução Spark Batch no EMR Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup) object WordCount{ def main(args:Array[String]){ if(args.length < 1){ System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>") System.exit(1) } val inputDir = args(0) val outputDir = args(1) val cnf = new SparkConf().setAppName("Spark Distributed WordCount") val sc = new SparkContext(cnf) val textFile = sc.textFile(inputDir) val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b ) counts.saveAsTextFile(outputDir) sc.stop() } } 34 O endereço do bucket de input e de output são parâmetros do job
  • 35. Exemplo Execução Spark Batch no EMR Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup) object WordCount{ def main(args:Array[String]){ if(args.length < 1){ System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>") System.exit(1) } val inputDir = args(0) val outputDir = args(1) val cnf = new SparkConf().setAppName("Spark Distributed WordCount") val sc = new SparkContext(cnf) val textFile = sc.textFile(inputDir) val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b ) counts.saveAsTextFile(outputDir) sc.stop() } } 35 Leitura do arquivo do S3
  • 36. Exemplo Execução Spark Batch no EMR Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup) object WordCount{ def main(args:Array[String]){ if(args.length < 1){ System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>") System.exit(1) } val inputDir = args(0) val outputDir = args(1) val cnf = new SparkConf().setAppName("Spark Distributed WordCount") val sc = new SparkContext(cnf) val textFile = sc.textFile(inputDir) val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b ) counts.saveAsTextFile(outputDir) sc.stop() } } 36 Essa linha faz todo o processamento distribuído: a partição do arquivo, contagem de palavras e a agregação
  • 37. Exemplo Execução Spark Batch no EMR Código completo: (disponível em http://bit.do/spark-batch-example-aws-meetup) object WordCount{ def main(args:Array[String]){ if(args.length < 1){ System.err.println("Please set arguments for <s3_input_dir> <s3_output_dir>") System.exit(1) } val inputDir = args(0) val outputDir = args(1) val cnf = new SparkConf().setAppName("Spark Distributed WordCount") val sc = new SparkContext(cnf) val textFile = sc.textFile(inputDir) val counts = textFile.flatMap(line => line.split("s+")).map(word => (word, 1)).reduceByKey( (a,b) => a+b ) counts.saveAsTextFile(outputDir) sc.stop() } } 37 O resultado do processamento é salvo no bucket S3 de destino
  • 38. Exemplo Execução Spark Batch no EMR 38 Enquanto a tarefa está sendo executada, ela aparece assim
  • 39. Exemplo Execução Spark Batch no EMR 39 Se ela foi completada sem erros, ela aparece assim
  • 40. Casos de uso Spark Streaming 40
  • 41. Casos de uso Spark Streaming ● Monitoramento de ativos, serviços 41
  • 42. Casos de uso Spark Streaming ● Monitoramento de ativos, serviços ● Processamento de eventos em tempo real para alimentação de dashboards 42
  • 43. Casos de uso Spark Streaming ● Monitoramento de ativos, serviços ● Processamento de eventos em tempo real para alimentação de dashboards ● Processamento de dados vindos de serviços como ○ AWS Kinesis ○ Apache Kafka ○ Apache Flume ○ Twitter ○ ZeroMQ ○ MQTT 43
  • 44. Casos de uso Spark Streaming ● Monitoramento de ativos, serviços ● Processamento de eventos em tempo real para alimentação de dashboards ● Processamento de dados vindos de serviços como ○ AWS Kinesis ○ Apache Kafka ○ Apache Flume ○ Twitter ○ ZeroMQ ○ MQTT 44 Há clientes oficiais do Spark para todos esses serviços!
  • 45. Exemplo de Execução Spark Streaming no EMR 45
  • 46. Exemplo de Execução Spark Streaming no EMR As etapas para ter uma tarefa Spark Streaming rodando no AWS EMR são: ● Criação do cluster em modo cluster ● Escrita do código e empacotamento do mesmo em um JAR (Java Archive File) ● Upload do código (JAR) para o S3 ● Adição do seu job no cluster ● Caso não tenha havido erro na inicialização, a aplicação vai ficar rodando até haver algum erro ou ela ser finalizada manualmente. 46
  • 47. Exemplo de Execução Spark Streaming no EMR As etapas para ter uma tarefa Spark Streaming rodando no AWS EMR são: ● Criação do cluster em modo cluster ● Escrita do código e empacotamento do mesmo em um JAR (Java Archive File) ● Upload do código (JAR) para o S3 ● Adição do seu job no cluster ● Caso não tenha havido erro na inicialização, a aplicação vai ficar rodando até haver algum erro ou ela ser finalizada manualmente. 47 Note que, neste caso, o cluster é criado antes do envio do job
  • 48. Exemplo de Execução Spark Streaming no EMR ● Exemplo: contar quantos tweets em português são criados a cada 10 segundos: (disponível em http://bit.do/spark-streaming-example-aws-meetup) val config = new SparkConf().setAppName("aws-meetup-rio-2016-streaming") val ssc = new StreamingContext(config,batchDuration) val twitterConf = new ConfigurationBuilder() twitterConf.setOAuthAccessToken(accessToken) twitterConf.setOAuthAccessTokenSecret(accessTokenSecret) twitterConf.setOAuthConsumerKey(apiKey) twitterConf.setOAuthConsumerSecret(apiSecret) val auth = AuthorizationFactory.getInstance(twitterConf.build()) val tweets = TwitterUtils.createStream(ssc,Some(auth)) val portuguesetweets = tweets.map(status => status.getLang) .filter(lang => lang == "pt" ) portuguesetweets.count().print() ssc.start() 48
  • 49. Exemplo de Execução Spark Streaming no EMR ● Exemplo: contar quantos tweets em português são criados a cada 10 segundos: (disponível em http://bit.do/spark-streaming-example-aws-meetup) val config = new SparkConf().setAppName("aws-meetup-rio-2016-streaming") val ssc = new StreamingContext(config,batchDuration) val twitterConf = new ConfigurationBuilder() twitterConf.setOAuthAccessToken(accessToken) twitterConf.setOAuthAccessTokenSecret(accessTokenSecret) twitterConf.setOAuthConsumerKey(apiKey) twitterConf.setOAuthConsumerSecret(apiSecret) val auth = AuthorizationFactory.getInstance(twitterConf.build()) val tweets = TwitterUtils.createStream(ssc,Some(auth)) val portuguesetweets = tweets.map(status => status.getLang).filter(lang => lang == "pt" ) portuguesetweets.count().print() ssc.start() 49 Criação do stream twitter Filtragem pelo idioma (“pt”) Agregação (count) e impressão na saída padrão
  • 50. Exemplo de Execução Spark Streaming no EMR ● O resultado é impresso na saída padrão: 50 Podemos ver telas de logs, saída padrão e erro do YARN no EMR
  • 51. Exemplo de Execução Spark Streaming no EMR 51 Detalhe: na interface Spark UI (também acessível pelo EMR) é possível ver que a tarefa está sendo executada sem erros até o momento