O documento discute o uso da ferramenta Apache Spark para analisar grandes volumes de dados gerados pelo sistema Catalog3D. Experimentos com o Spark mostraram que é uma solução viável para armazenar e processar os dados de inserção do Catalog3D de forma escalonável. A aplicação desenvolvida usou Spark SQL para identificar os itens mais inseridos em cada dia a partir dos dados estruturados em arquivos JSON.
1. Pós QCon: Big Data
Experimentos realizados na Promob
Fernando Cicconeto
2. Sobre o trabalho
- Estudo em tópicos básicos de Big Data
- Experimento em análise de dados de eventos, gerados pelo Catalog3D
- Os eventos geram um grande volume de informação
- Um evento em si não significa muito
- Mas quando o conjunto é analisado, podemos obter informações úteis
- Problema: como armazenar e analisar um grande volume de dados?
3. Catalog3D
- Plataforma cloud para cadastro de itens 3D
- Modelos e Materiais 3D
- Web App onde é feito o cadastro e visualização
- Plugin cliente para o Promob - possibilita a utilização dos itens do Catalog3D
em projetos de ambientes
6. Dados do Catalog3D
- Cada vez que um item do Catalog3D é utilizado na aplicação cliente, é
gerado um registro
7. Dados do Catalog3D
- Estes registros são armazenados em uma coleção de documentos do
MongoDB
- Diariamente, são gerados cerca de 25000 registros
- Com o crescimento do volume de informação, realizar queries simples
tornou-se pouco performática
- Aumento do custo de armazenamento
- É necessário mudar a forma como são armazenados e consultados estes
dados
- Cenário para estudo de caso de Big Data
8. O que é Big Data?
- Grandes volumes de dados
- Estruturados ou não
- Gerados rapidamente ou em grande quantidade
- Podem ser gerados de diversas fontes diferentes, e não ter a mesma
estrutura
- Os dados podem ser analisados para auxiliar na tomada de decisões
estratégicas
- Pode consistir em um conjunto de dados tão grande e complexo, que um
sistema de banco de dados convencional é incapaz de lidar
9. Estudo de caso
- Ferramenta apresentada no QCon: Apache Spark
- Objetivo: estudar o Spark e analisar o comportamento da ferramenta sobre
os dados do Catalog3D
10. - Sistema para processamento de dados em cluster, de propósito geral
- Provê APIs de alto nível em várias linguagens: Java, Scala, Python, R
- Executa na JVM
- Pode ser executado um cluster com paralelismo entre nodos
- Conceito de RDD: Resilient Distributed Dataset
- Coleção de dados imutável, paralelizável e tolerante a falhas
- RDDs suportam dois tipos de operações
- Transformation: retorna um novo RDD. Exemplo: map
Apache Spark
11. Apache Spark
- Trabalha com diferentes data sources: arquivos locais, HDFS (Hadoop
Distributed File System), Amazon S3, bancos de dados, etc.
- Exemplo de RDD gerado a partir de um arquivo local:
- val rdd = sc.textFile("README.md")
- Cada linha do arquivo-texto é considerada um registro
- Conceitos de programação funcional (Gabriel Milani)
- Higher-order functions - val linesWithSpark = rdd.filter(line =>
line.contains("Spark"))
- Lazy evaluation: transformations somente são processadas ao executar uma action - val
count = linesWithSpark.count()
12. Apache Spark
- Console: spark-shell
- Self-contained applications: aplicações que são escritas e “deployadas” para
o Spark
- Possibilidade de trabalhar com dados estruturados ou não
- Dados não-estruturados: RDD puro. Ex.: arquivo-texto, CSV
- Dados estruturados: Spark SQL. Ex.: arquivos JSON, conexão direta com banco de dados
- O Spark SQL é uma API de extensão do Spark. Há outras, para variados
propósitos:
- mllib: machine learning
13. Voltando ao estudo de caso...
- Aqui trabalharemos com dados estruturados, em arquivos JSON
- Portanto, será usado o Spark SQL
- Spark SQL permite o processamento de dados estruturados, utilizando a
linguagem SQL para fazer consultas
- Exemplo:
val items = sqlContext.read.json("items-insertion.json")
items.createOrReplaceTempView("items")
val itemIds = sqlContext.sql("SELECT itemId FROM items")
14. Estrutura da aplicação
- Particionamento dos dados: para cada data, é criado um arquivo JSON
contendo as inserções daquela data: 2017-05-21, 2017-05-22, etc
- Self-contained applications que fazem processamento em batch (lotes)
- Ao fazer o deploy da aplicação, o batch será executado, salvando o resultado
em um outro conjunto de arquivos
- Linguagem Scala
- Exemplo: itens mais inseridos em cada dia
20. Considerações finais
- O Spark trata-se de uma solução viável para o problema dos dados de
inserção do Catalog3D
- Escalabilidade: possibilidade de configurar clusters e executar
processamento paralelo um mesmo conjunto de dados
- A AWS fornece a opção de configurar clusters e fazer o deploy diretamente
através de uma interface web - Amazon EMR.
- Por outro lado, há uma curva de aprendizagem elevada. Há vários conceitos
a serem entendidos.
- Para o problema em questão, que é relativamente simples, é possível aplicar
a estrutura de dados e alguns conceitos do Spark para a criação de jobs