UNIVERSIDADE FEDERAL DE MINAS GERAIS Instituto de Ciências Exatas
Departamento de Ciência da Computação
Maximilliam Alex De Araujo
ESTUDO DA INTEGRAÇÃO DE TECNOLOGIAS DE PROCESSAMENTO E ANÁLISE DE DADOS NO APACHE ZEPPELIN
Belo Horizonte 2018
SUMÁRIO 1 INTRODUÇÃO ... 3 2 JUSTIFICATIVA ... 4 3 OBJETIVO GERAL ... 5 3.2 Objetivo Específico ... 5 4 DESENVOLVIMENTO DO TRABALHO ... 6
4.1 Arquitetura do Apache Zeppelin ... 6
4.2 A Camada dos Interpretadores ... 8
4.2.1 Backends na distribuição oficial ... 8
4.3 Visualização dos dados ... 12
5 RESULTADOS E DISCUSSÃO ... 15
6 CONCLUSÕES E TRABALHOS FUTUROS ... 16
3
1 INTRODUÇÃO
A produção de dados está aumentando em larga escala e as estimativas indicam que a cada dois anos a quantidade produzida de dados irá dobrar. Estes conjuntos muitas vezes fogem dos convencionais dados estruturados e demandam prontidão em processamento e análise. Além disso, o Big Data introduz uma nova compreensão de valores e gera desafios para organizar e gerenciar tais conjuntos de dados (CHEN; MAO; LIU, 2014).
O mercado de negócios tem dado maior atenção aos dados para aumentar a competitividade. A quantidade e variedade de dados supera a capacidade de análise manual, porém a capacidade computacional vem se tornado mais poderosa e algoritmos e metodologias permitem que a ciência dos dados seja introduzida ao mercado (PROVOST; FOSTER, 2013).
“Em alto nível, a ciência de dados é um conjunto de princípios fundamentais que apoiam e orientam a extração baseada em princípios da informação e do conhecimento a partir dos dados” (PROVOST; FOSTER, 2013, tradução nossa).
O ciclo de vida de um processo de ciência dos dados pode não ser algo trivial. É possível que em detrimento de um problema haja engajamento de diversos agentes. Cientistas de dados, engenheiro de dados, matemáticos, estatísticos, gestores, desenvolvedores entre outros. Além disso, por se tratar de dados massivos não estruturados vindos de diversas fontes, na maioria das vezes existe a necessidade de utilização de diferentes técnicas e ferramentas para resolução dos problemas orientados a dados (LEE, 2015).
No intuito de centralizar e organizar as atividades de processos de ciência dos dados e Big Data, o Apache Zeppelin foi criado (LEE, 2015). Um notebook baseado na Web que possibilita análise interativa de dados e documentos colaborativos (Site Apache Zeppelin 2018). A ferramenta foi criada para se conectar a diferentes tipos de tecnologias, utilizando um conceito de interpretadores, além de permitir o compartilhamento do trabalho executado. (LEE, 2015)
quotes com copy-paste, não nunca na computação
frases PRECISAM estar na forma sujeito-verbo-predicado
2 JUSTIFICATIVA
A fim de compilar a organização dos processos em um só lugar para possibilitar a melhor comunicação dos dados, a utilização de ferramentas torna mais produtiva a geração de análises. Dentre as ferramentas disponíveis no mercado temos o Apache Zeppelin, que tem o propósito de organizar o ciclo de vida da ciência dos dados de forma flexível.
A possibilidade de trabalhar com uma ferramenta que “conversa” na mesma linguagem que o utilizador é possível graças ao que se chama de interpretador. Um interpretador pode ser comparado a um plug de tomada, a qual é conectado a tecnologia que se vai utilizar.
O Apache Zeppelin trabalha sobre a plataforma web, o que possibilita um ganho enorme em compartilhamento. Ademais, possui muitas tecnologias plugáveis ao seu backend (termo utilizado para definir tecnologias que funcionam do lado do servidor). Assim, estudar como essa integração funciona possibilita um ganho significativo de conhecimento em tecnologias de ponta do mercado que envolve a ciência dos dados.
5
3 OBJETIVO GERAL
Entender o funcionamento do software e descrever em uma documentação.
3.2 Objetivo Específico
Identificar os conceitos de computação intrínsecos ao Apache Zeppelin. Identificar quais tecnologias estão plugadas em modo nativo;
Analisar o funcionamento dos interpretadores do Apache Zeppelin.
4 DESENVOLVIMENTO DO TRABALHO
A análise e processamento de Big Data através da ciência dos dados é uma forma de aumentar a competitividade e a eficiência das empresas. Ao analisar fatores externos e internos a essas empresas e processar o grande conjunto de dados gerados, torna-se possível predizer, por exemplo, possíveis eventos econômicos.
No entanto, essa atividade exige grande interdisciplinaridade e por esse motivo pode se tornar complexa. Além disso, a fim de possibilitar melhores decisões, o ciclo de vida que envolve preparação, engenharia, análise e produção de dados precisa ser maleável de forma a ser compreendido tanto por um profissional técnico, quanto por um gestor que não tem conhecimento técnico de como os dados são tratados.
Em 2013, no intuído de auxiliar, organizar e centralizar parte do ciclo de vida de um processo de ciências dos dados, um projeto nomeado Zeppelin foi criada por uma empresa chamada ZEPL (anteriormente conhecido como NFLabs), comandada por Moon Soon Lee. Em 2014, o projeto Zeppelin tornou-se projeto de incubação na Apache Software Foundation e em 2016, se formou em incubação e se tornou um projeto de alto nível na Apache, dando origem a ferramenta conhecida como Apache Zeppelin.
O Apache Zeppelin é denominado pelos criadores como um notebook, em uma analogia a um caderno de anotações, baseando suas funções em parágrafos. A ferramenta é desenvolvida em tecnologias Web, que permite ao Zeppelin facilidade em compartilhamento de suas funções. Os notebooks interativos permitem que engenheiros, analistas e cientistas de dados tenham melhor aproveitamento, desenvolvendo, organizando, executando e compartilhando código de dados e visualizando resultados sem se referir a linhas de comando ou precisar dos detalhes do cluster.
O software se destaca por sua capacidade de integrar diversas outras tecnologias através de uma funcionalidade denominada “Interpreter”, em português, Interpretador. O Interpreter é uma camada para integração de “backend” (ferramenta que trabalham por trás da aplicação), sendo que a ferramenta já possui mais de 20 interpretadores em seu pacote de distribuição oficial, dando a possibilidade a desenvolvedores de integrar outros backends.
7
A arquitetura do Apache Zeppelin possui três camadas: Frontend
Servidor do Zeppelin Interpreter
A imagem a seguir demonstra a arquitetura do software com quatro interpretadores.
Arquitetura do Apache Zeppelin. Exemplo ilustrativo.
A partir de um Web Browser, conecta-se ao frontend do Zeppelin que é baseado em AngularJS e Twitter Bootstrap. A ferramenta se conecta ao servidor Apache Zeppelin com duas interfaces possíveis, REST e Web Socket.
Representational State Transfer (REST), em português Transferência de Estado Representacional, é um estilo de arquitetura para definir as restrições e propriedades do protocolo HTTP.
WebSocket é uma tecnologia que permite comunicação bidirecional por canais full-duplex (Transmissor e Receptor podem transmitir dados simultaneamente em ambos os sentidos) sobre um único socket TCP.
O servidor funciona sobre uma Máquina Virtual Java (JVM – Java Virtual Machine) que também é um Interpreter. O Interprete se comunica com um programa que executa em plano de fundo do Zeppelin através do Apache Thrift.
figuras/tabelas ficam no topo ou final da página
TODAS precisam ser numeradas e referenciadas por tal número no texto
O Apache Thrift permite definir tipos de dados e interfaces de serviço em um arquivo de definição simples. Tomando esse arquivo como entrada, o compilador gera o código a ser usado para criar facilmente clientes e servidores RPC que se comunicam facilmente entre as linguagens de programação.
4.2 A Camada dos Interpretadores
O Interpreter é uma funcionalidade que torna o Zeppelin plugável a outras tecnologias.
Cada processo de Interpretador pertence a um Grupos de Interpretadores, que funcionam como uma unidade de início e parada do interpretador. É possível ter um grupo para um único interpretador, ou a combinação de outros interpretadores.
Para fazer a ligação entre os processos, o Zeppelin fornece três modos diferentes para executar o processo de interpretação: compartilhado, com escopo e isolado.
No modo Compartilhado, o processo da JVM e os grupos de interpretadores atendem a todos os Notes.
No modo Escopo, a ferramenta executa um processo, porém há múltiplos grupos de interpretadores. Nesse modo, o Zeppelin possibilita sessão dedicada a cada nota, mas ainda permitindo o compartilhamento de recursos.
O modo isolado executa de forma separada, insolando completamente o recurso para todas as notas.
4.2.1 Backends na distribuição oficial
Alluxio
Alluxio é um sistema distribuído de armazenamento virtual centralizado em memória que unifica o acesso ao dado às estruturas computacionais e sistemas de armazenamento inferiores.
Angular
O Angular é uma plataforma para facilitar a criação de aplicações web baseada em JavaScript.
9
Big Query
O BigQuery é um Data Warehouse no-ops altamente escalável na plataforma Google Cloud. A ferramenta permite realizar consultas SQL rápidas em conjuntos de dados grandes em tabelas de anexação utilizando o poder de processamento da infraestrutura do Google.
Cassandra
Cassandra é um sistema de gerenciamento de banco de dados NoSQL orientado a colunas feito para trabalhar de forma distribuída. O SGBD implementa o modelo de dados Big Table e utiliza aspectos de arquitetura introduzido por Amazon Dynamo. A ferramenta tem como foco alta escalabilidade e disponibilidade.
ElasticSeach
É um mecanismo de busca distribuído para nuvem construído em cima do Apache Lucene. Pode ser usado para pesquisa em todos os tipos de documentos, fornecendo pesquisa escalável quase em tempo real.
Flink
O Apache Flink é uma plataforma de código aberto para fluxo distribuído e processamento de dados em lote. O núcleo do Flink é um mecanismo de fluxo de dados de fluxo contínuo que fornece distribuição de dados, comunicação e tolerância a falhas para cálculos distribuídos em fluxos de dados. O Flink também constrói o processamento em lote na parte superior do mecanismo de streaming, sobrepondo o suporte da iteração nativa, da memória gerenciada e da otimização de programas.
Geode
O Apache Geode é uma plataforma de gerenciamento de dados que fornece acesso consistente em tempo real a aplicativos com uso intenso de dados em arquiteturas de nuvem amplamente distribuídas. Ele usa técnicas dinâmicas de replicação e particionamento de dados para implementar alta disponibilidade, melhor desempenho, escalabilidade e tolerância a falhas. Além disso, o Geode é um sistema de gerenciamento de dados na memória que fornece notificações de eventos assíncronos confiáveis e entrega garantida de mensagens.
HBase
É um banco de dados não-relacional criado para hospedar tabelas muito grandes, baseado em HDFS. Fornece acesso de leitura e gravação em tempo real a grandes conjuntos de dados.
Ignite
É uma plataforma de processamento, de cache e de banco de dados distribuídos centrada em memória para cargas de trabalhos grandes. A persistência nativa no Ignite pode ser ativada e desativada. Isso permite que o Ignite armazene conjuntos de dados maiores do que os que podem caber na memória disponível. Apesar de ser altamente disponível e escalonável horizontalmente, o Ignite suporta transações SQL e ACID em vários nós do cluster.
JDBC
O JDBC (Java Database Connectivity) é um padrão de conectividade entre a linguagem de programação Java e vários bancos de dados SQL e de outras fontes em tabulares, como planilhas e arquivos simples.
Kylin
O Kylin de análise distribuída é projetado para fornecer interface SQL e análise multidimensional no Hadoop.
Lens
Lens é uma plataforma que fornece uma visão comum dos dados armazenados em várias camadas. O objetivo é simplificar a análise de dados concentrando a visualização de várias fontes em um único lugar. Ele fornece um único ponto final para um usuário consultar dados, independentemente de onde e como os dados são armazenados, permitindo efetivamente que várias fontes de dados sejam vistas como um único Data Warehouse. Lens também tem a capacidade de entender a hierarquia dos dados e relacionamentos usando definições de cubo.
Livy
O Apache Livy é um serviço que permite interação facilitada com um cluster Spark utilizando uma interface REST. Ele permite o envio de tarefas do Spark ou trechos de
11
código Spark e recuperação dos resultados de forma síncrona ou assíncrona, bem como gerenciamento do Spark Context. O serviço ainda simplifica a interação entre o Spark e os servidores de aplicativos, permitindo a utilização do Spark em aplicativos móveis.
Markdown
Uma ferramenta que converte texto simples em estrutura HTML ou XHTML. A meta do Markdown é tornar textos mais legíveis sem parecer que foram marcados com tags ou instruções de formatação.
Pig
É uma plataforma para análise de grandes conjuntos de dados que fornece linguagem de alto nível para expressar programas de análise de dados, juntamente com a infraestrutura para avaliar esses programas. O Pig é passível de grande paralelização, que permite a plataforma manipular conjuntos de dados grandes.
PostgreSQL
Sistema de gerenciamento de banco de dados objeto-relacional.
Python
Uma linguagem de programação de propósito geral, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte.
R
R é uma linguagem e um ambiente para computação estatística e gráficos. Fornece uma ampla variedade de estatística e técnicas gráficas e é altamente extensível. Um dos pontos fortes de R é a facilidade com que plotagens podem ser produzidas, incluindo símbolos matemáticos e fórmulas.
Scalding
Uma linguagem de programação dinâmica que faz com que os cálculos pareçam muito semelhantes aos da API de coleta do Scala. O Scalding fornece a funcionalidade de algoritmos de junção personalizados a várias APIs (baseadas em campos, tipo
seguro e matriz). A linguagem é fundamentada no framework Cascading e herda extensibilidade com o ecossistema em cascata e portabilidade de aplicativos.
Scio
Uma API do Scala para Apache Beam e Google Cloud Dataflow. O Scio é descrito como um “thin wrapper” no topo do Java SDK, oferecendo uma maneira fácil de construir pipelines do Dataflow no Scala. O tipo de dados do Scio imita o RDD (conjunto de dados distribuído resiliente) do Spark para oferecer operações paralelas. Além disso, utiliza coleções de tuplas chave-valor para fornecer agrupamento. Há também uma simplificação em sintaxes complexas para apresentar além de junções internas e externas a esquerda, junções hash baseadas em entradas lateral e junções esparsas externas.
Shell
Um interpretador para executar processos externos em Java.
Spark
O Apache Spark é um sistema de computação em cluster rápido e de uso geral. Ele fornece APIs de alto nível em Java, Scala, Python e R e um mecanismo otimizado que suporta gráficos gerais de execução. Ele também suporta um conjunto avançado de ferramentas de nível superior, incluindo o Spark SQL para SQL e para o processamento de dados estruturados, MLlib para aprendizado de máquina, GraphX para processamento de gráficos e Spark Streaming.
Além das tecnologias que vem na distribuição oficial do Zeppelin, a ferramenta possui flexibilidade para integrar outras tecnologias. Tendo um interpretador de preferência conectado, o utilizador tem a capacidade de gerar o que é chamado de “Notes”.
4.3 Visualização dos dados
O notebook é composto por parágrafos, fazendo uma analogia a um caderno de anotações. Cada parágrafo é um caixa que recebe algum tipo de script pré-definido nos interpretadores. O texto interpretado possui uma marcação “%” para determinar o interpretador e o script a ser executado (no caso do Spark temos “%spark”).
13
O exemplo a seguir demonstra um parágrafo com script Markdown e um Spark.
Para a resultado existe a possibilidade de escolher a forma de visualização, como tabelas e gráficos.
A seguir temos um exemplo do fluxo de trabalho no Zeppelin:
1. Uma instrução é feita e enviada para o servidor virtual do Zeppelin 2. O servidor lança uma JVM para o interpretador requisitado
3. A instrução no servidor é enviada para o interpretador
4. O interpretador utiliza alguma tecnologia para fazer o tratamento 5. O interpretador devolve os dados em algum formato para o servidor 6. O Servidor devolve os dados para o browser que interpreta o formato
Por fim, os blocos de anotações podem ser compartilhados entre os colaboradores através de uma URL, ou incorporados em algum site tendo suas alterações exibidas em tempo real.
15
5 RESULTADOS E DISCUSSÃO
O trabalho tinha como objetivo principal a aquisição de conhecimento à cerca do software Apache Zeppelin, bem como o entendimento do funcionamento de sua integração a outras tecnologias.
A ferramenta possui uma ampla integração com outras tecnologias e o entendimento de todas era inviável com o tempo tido para desenvolvimento do trabalho. Algumas tecnologias expostas no site oficial do sistema foram estudadas superficialmente para verificação das funcionalidades entregues pelas ferramentas.
Tal estudo permitiu entender a arquitetura por trás do Apache Zeppelin, bem como trouxe um ponto de partida para escolher tecnologias mais específicas para elaboração de um estudo de caso.
O próprio trabalho é tido como resultado das pesquisas, visto que documenta o funcionamento da arquitetura e o funcionamento do interpretador do Zeppelin.
6 CONCLUSÕES E TRABALHOS FUTUROS
A priori, foi suposto que a ferramenta não tinha documentação, o que não se mostrou verdade. O Apache Zeppelin possui uma documentação em inglês que é mantida por seus desenvolvedores e sua comunidade no GitHub. Apesar disso, as explicações dentro da documentação se limitam a configurações de como utilizar ou integrar funções ao sistema. Por esse motivo, este documento pode ser visto como um suporte a introdução para utilização da ferramenta.
As pesquisas se limitaram ao Zeppelin, não fazendo comparações com outras ferramentas que entregam o mesmo tipo de serviço, como Jupyter ou IPython, que são ferramentas mais maduras que o Apache Zeppelin em questão de tempo no mercado. Assim, não é possível dizer se o software é a melhor opção de utilização como notebook de ciência dos dados.
O posicionamento do Zeppelin dentro de um processo de análise de dados pode ser visto como a interface entre o usuário final dos dados e diversas outras tecnologias. Essa flexibilidade vai permitir que os estudos sejam direcionados através de um estudo de caso, para área de conhecimento de banco de dados, tendo como objetivos futuros a extração do conhecimento obtido para verificar a possibilidade de inclusão de estudos de tecnologias recentes de mercado em disciplinas de Bancos de Dados do departamento de compunção da Universidade Federal de Minas Gerais.
17
REFERÊNCIAS
ALLUXIO OPEN FOUNDATION. Documentation. [S.l]: Alluxio Open Foundation. Disponível em: <https://www.alluxio.org/docs/1.7/en/Getting-Started.html>. Acesso em: 5 abr. 2018.
THE APACHE SOFTWARE FOUNDATION. Documentation. [S.l.]: The Apache Software Foundation. Disponível em: <https://beam.apache.org/documentation/>. Acesso em: 6 abr. 2018
APACHE ZEPPELIN. Bigquery Interpreter For Apache Zeppelin. [S.l]: The Apache Software Foundation. Disponível em:
<https://zeppelin.apache.org/docs/0.7.3/interpreter/bigquery.html>. Acesso em: 6 abr. 2018.
GITHUB, INC. Elasticsearch. [S.l]: Github, Inc., 2018. Disponível em: < https://github.com/elastic/elasticsearch>. Acesso em: 6 abr. 2018.
THE APACHE SOFTWARE FOUNDATION. Introduction To Apache Flink. [S.l]: The Apache Software Foundation, 2014-2017. Disponível em:
<https://flink.apache.org/introduction.html>. Acesso em: 20 abr. 2018.
GAVIN; BAWASKAR, Swapnil. Geode. [S.l]: Apache Software Foundation, 2018. Disponível em: <https://cwiki.apache.org/confluence/display/GEODE/Index>. Acesso em: 20 abr. 2018.
THE APACHE SOFTWARE FOUNDATION. Apache HBase. [S.l]: The Apache Software Foundation, 2007-2018. Disponível em:
HANSON, J. Uma Introdução Ao Hadoop Distributed File System: Explorar a Estrutura e Subsistemas do HDFS. [S.l]: IBM, 2013. Disponível em:
<https://www.ibm.com/developerworks/br/library/wa-introhdfs/index.html>. Acesso em: 3 maio 2018.
CONFLUENCE ADMINISTRATOR. Apache Hive. [S.l]: Confluence, jan 2018. Disponível em: <https://cwiki.apache.org/confluence/display/Hive>. Acesso em: 20 maio 2018.
APACHE SOFTWARE FOUNDATION. Apache Ignite. [S.l]: Apache Software
Foundation, 2015-2017. Disponível em: <https://ignite.apache.org/whatisignite.html>. Acesso em: 20 maio 2018.
ORACLE. Java SE Technologies – Database. [S.l]: ORACLE. Disponível em: <http://www.oracle.com/technetwork/java/javase/jdbc/index.html>. Acesso em: 20 maio 2018.