Download - Hadoop MapReduce and Apache Spark on EMR: comparing performance for distributed workloads (1)
Hadoop MapReduce and Apache Spark: Comparing Performance for Distributed
WorkloadsFelipe Almeida ([email protected])
Rosângela Oliveira ([email protected])
Bancos de Dados não Convencionais 2015/02Prof. Alexandre Assis
Estrutura
● Motivação● Ambiente● Trabalho Preliminar● Dados utilizados● Pré-processamento● Experimentos● Experimento 1● Experimento 2● Conclusões● Lições aprendidas 2
Motivação
Comparar Hadoop MapReduce e Spark em tarefas distribuídas, em especial workloads iterativos.
1ª tarefa: Wordcount distribuído2ª tarefa: Clusterização K-means (ingênua)
3
Ambiente
Os experimentos foram executados em instâncias EC2 do tipo m3.xlarge com:● 4 processadores● 15GB RAM● 80GB de SSD storage.
4
Ambiente
Configuração de cada nó Hadoop
5
YARN_RESOURCEMANAGER_HEAPSIZE 2396
YARN_PROXYSERVER_HEAPSIZE 2396
YARN_NODEMANAGER_HEAPSIZE 2048
HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2396
HADOOP_NAMENODE_HEAPSIZE 1740
HADOOP_DATANODE_HEAPSIZE 757
mapreduce.map.java.opts -Xmx1152m
mapreduce.reduce.java.opts -Xmx2304m
mapreduce.map.memory.mb 1440
mapreduce.reduce.memory.mb 2880
Ambiente
Configuração de cada nó Spark (Setup 1)
Configuração de cada nó Spark (Setup 2)
A configuração com a alocação dinâmica habilitada só é possivel no Yarn.
6
spark.dynamicAllocation.enabled true
--num-executors 2
spark.executor.cores 1
spark.executor.memory 4096
spark.dynamicAllocation.enabled false
Trabalho Preliminar
Dois datasets foram utilizados com o objetivo de fixar o entendimento do ambiente Hadoop e Spark.
● Text 8: dataset de +- 100Mb, utilizado para executar o Wordcount local.
● Billion word - dataset de +- 4Gb, utilizado para executar o Wordcount local e no ambiente EMR da Amazon.
7
Dados utilizados: Wordcount
Na fase 1 foi utilizado um dataset composto por:● Informações de pesquisas efetuadas na internet;● 408 arquivos.txt;● Tamanho total de 18Gb.
8
Estrutura das Linhas
Dados Utilizados: K-means
Dataset de avalização de produtos vendidos na Amazon. Originado na UCSD; o dataset é composto por:
● Tamanho total de 60Gb+ (nós usamos 15Gb)● Total de 24 categorias de produtos (usamos 1 - livros)● Formato Json● Abrangendo o período de maio 1996 - julho 2014.
9
Exemplo de uma review
Pré-processamento
Normalização e limpeza no dataset das reviews da Amazon, com o objetivo de:
● Obter features das avaliações● Agrupar características consideradas relevantes● Adequar os dados para o K-means
● Featurização● Normalização
Foi usado SparkSQL para a limpeza e formatação dos dados.
10
Pré-processamento
Features númericas selecionadas: 1. Média da avaliação 2. Tamanho do texto da avalição3. Número de “estrelas” dado4. Review feita em dia útil5. Review feita em fim de semana6. Review feita durante o dia7. Review feita durante a noite
11
Pré-processamento
Usamos também o Spark para o pré-processamento:
12
Cria um novo DataFrame com os dados pré-tratados
Experimentos
Os experimentos foram feitos com o intuito de comparar o Hadoop MapReduce com o Spark no que tange à performance e na capacidade de lidar com grande volume de dados.
Foi usado Amazon EMR para ajudar na reprodutibilida- de e para facilitar o desenvolvimento dos programas.
13
Experimentos
r
14
Script para criar um cluster na Amazon EMR Interface da Amazon EMR
Experimento 1
15Execução do Wordcount Distribuido - UMBC DATASET 18Gb
Experimento 1
Ao utilizar a opção Dynamic Allocation do spark, o mesmo demonstrou uma melhora significativa de desempenho:
16
Experimento 1
17
Experimento 2
O K-means pode ser distribuído da seguinte forma:
Em cada iteração, cada nó pega as suas amostras e os centros dos clusters atuais para decidir a que cluster cada amostra pertence. (mapper)
Feito isso, os reducers pegam os centros dos clusters e as respectivas amostras e calculam novos centros para os clusters.
18
Experimento 2
19
Experimento 2
20
Conclusões
Em geral, mais nós apresentaram um ganho grande em perfor-mance, como era esperado.
O Spark tem, em geral, performance superior ao Hadoop, sobre-tudo em tarefas iterativas, mas também em tarefas de poucas passadas (como o WordCount).
Utilizar uma configuração com mais nós pode, a partir de um determinado momento, não causar muita melhora, principalmen- te quando se analisa o custo-benefício.
21
Conclusões
O algoritmo K-means convergiu relativamente rápido;● Em geral, menos de 10 iterações
22
Lições Aprendidas
● Configurações podem fazer muita diferença.
● Se o seu projeto usa outras bibliotecas, precisa colocar todas dentro do Jar que você manda para o cluster.● Usamos sbt-assembly para montar os Jars do Spark e do
Hadoop
● As versões adequadas devem ser utilizadas a fim de evitar quebra de pacote.
23
Lições Aprendidas
● Em vez de baixar arquivos grandes para a sua máquina e fazer upload para o S3, é melhor criar uma outra máquina EC2, baixar o arquivo nessa máquina e fazer o upload de lá pois, se os dois estiverem na mesma área AWS, a transferência é muito mais rápida.
● Testes locais devem ser feitos com pelo menos duas threads, pois há muitos erros que só aparecem quando há mais de um nó.
24
Lições Aprendidas
● UDFs (User-defined Functions) são formas ótimas de se ir incrementando um DataFrame e podem ser usadas para vários fins:● Extração de features derivadas● Adição de dados● Normalização● etc.
25
Referências
O código utilizado em todas as etapas está em https://github.com/queirozfcom/hadoop_spark_ml_comparison
26