Apache Zeppelin

Open Source Notebooks Visualização Data Science

Notebooks interativos para análise de dados e visualização

O que é Apache Zeppelin?

Apache Zeppelin é uma plataforma de notebooks baseada na web que permite análise de dados interativa e colaborativa. Originalmente desenvolvido pela NFLabs (posteriormente adquirida pela MapR), Zeppelin se tornou um projeto Apache em 2014. É especialmente popular no ecossistema Hadoop e Spark, oferecendo uma interface intuitiva para exploração de dados, visualização e prototipagem de análises.

História

Apache Zeppelin foi criado em 2013 por Moon soo Lee na NFLabs como uma ferramenta para facilitar a análise de dados no ecossistema Hadoop. O projeto foi doado para a Apache Software Foundation em 2014 e se tornou um Top-Level Project em 2016. Zeppelin foi pioneiro em trazer o conceito de notebooks para o mundo Big Data, inspirando outras ferramentas similares.

Arquitetura

Zeppelin utiliza uma arquitetura baseada em interpreters que permite suporte a múltiplas linguagens e sistemas. O core é escrito em Java/Scala com frontend em AngularJS. Os interpreters são plugáveis e podem executar em processos separados, proporcionando isolamento e escalabilidade. Suporta deployment standalone, cluster e containerizado.

Vantagens

  • Multi-linguagem: Suporte a Scala, Python, SQL, R, Shell e mais
  • Integração Spark: Integração nativa e otimizada com Apache Spark
  • Visualizações Built-in: Gráficos e visualizações sem código adicional
  • Colaboração: Compartilhamento e versionamento de notebooks
  • Interpreters Plugáveis: Extensibilidade através de interpreters customizados
  • Interface Web: Acesso via navegador sem instalação local
  • Scheduling: Execução agendada de notebooks
  • Security: Autenticação e autorização integradas

Desvantagens

  • Performance: Pode ser lento com notebooks muito grandes
  • Estabilidade: Menos estável que Jupyter em alguns cenários
  • Ecossistema: Menor ecossistema de extensões que Jupyter
  • Debugging: Ferramentas de debug limitadas
  • Recursos Limitados: Menos recursos que IDEs especializadas

Principais Recursos

📓 Interactive Notebooks

Notebooks web interativos com suporte a múltiplas linguagens no mesmo documento.

🔥 Spark Integration

Integração nativa com Apache Spark, incluindo Spark SQL, Streaming e MLlib.

📊 Built-in Visualizations

Visualizações automáticas de dados com gráficos interativos e customizáveis.

🔌 Pluggable Interpreters

Sistema de interpreters extensível para suporte a novas linguagens e sistemas.

👥 Collaboration

Compartilhamento de notebooks, comentários e controle de versão integrado.

⏰ Scheduling

Execução agendada de notebooks com integração a sistemas de workflow.

Interpreters Suportados

Spark: Scala, Python (PySpark), SQL, R (SparkR)
SQL: JDBC, Hive, Impala, Phoenix, Cassandra
Python: Python 2/3, IPython, Conda
R: R, IRKernel, SparkR
Shell: Bash, Shell scripts
Outros: Flink, Beam, Livy, Kylin, Elasticsearch

Tipos de Visualização

  • Tabelas interativas
  • Gráficos de linha
  • Gráficos de barras
  • Gráficos de pizza
  • Scatter plots
  • Mapas geográficos
  • Heatmaps
  • Box plots
  • Histogramas
  • Network graphs
  • Visualizações customizadas
  • Dashboards interativos

Casos de Uso

🔬 Análise Exploratória de Dados

Exploração interativa de grandes datasets usando Spark com visualizações automáticas.

Exemplo: Análise de logs de aplicação com Spark SQL e visualizações de tendências.
🤖 Prototipagem de Machine Learning

Desenvolvimento e teste de modelos de ML usando Spark MLlib e Python.

Exemplo: Modelo de recomendação usando Spark MLlib com visualização de resultados.
📊 Relatórios Interativos

Criação de relatórios dinâmicos com parâmetros e visualizações interativas.

Exemplo: Relatório de vendas com filtros dinâmicos e gráficos atualizáveis.
🎓 Educação e Treinamento

Ensino de conceitos de Big Data e Data Science com exemplos práticos.

Exemplo: Workshop de Spark com notebooks compartilhados para estudantes.
🔄 ETL e Data Processing

Desenvolvimento e documentação de pipelines de processamento de dados.

Exemplo: Pipeline ETL documentado com Spark para transformação de dados.

Quando Usar Apache Zeppelin

✅ Recomendado para:
  • Ambientes com Apache Spark
  • Análise exploratória de Big Data
  • Prototipagem de modelos de ML
  • Colaboração em projetos de Data Science
  • Educação e treinamento em Big Data
  • Relatórios interativos com Spark SQL
  • Integração com ecossistema Hadoop
⚠️ Considere alternativas se:
  • Não usa Apache Spark (considere Jupyter)
  • Precisa de debugging avançado
  • Foco principal é Python (Jupyter)
  • Necessita de IDE completa
  • Trabalha principalmente com dados pequenos
  • Precisa de extensões específicas do Jupyter

Exemplos Práticos

Instalação e Configuração

# Download e instalação
wget https://archive.apache.org/dist/zeppelin/zeppelin-0.11.0/zeppelin-0.11.0-bin-all.tgz
tar -xzf zeppelin-0.11.0-bin-all.tgz
cd zeppelin-0.11.0-bin-all

# Configuração básica
cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
cp conf/zeppelin-env.sh.template conf/zeppelin-env.sh

# Configurar Spark (zeppelin-env.sh)
export SPARK_HOME=/path/to/spark
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=python3

# Iniciar Zeppelin
./bin/zeppelin-daemon.sh start

# Acesso via navegador: http://localhost:8080

Docker Deployment

# Docker Compose
version: '3.8'
services:
  zeppelin:
    image: apache/zeppelin:0.11.0
    container_name: zeppelin
    ports:
      - "8080:8080"
    volumes:
      - ./notebooks:/opt/zeppelin/notebook
      - ./logs:/opt/zeppelin/logs
      - ./conf:/opt/zeppelin/conf
    environment:
      - ZEPPELIN_ADDR=0.0.0.0
      - ZEPPELIN_PORT=8080
      - SPARK_MASTER=local[*]
    networks:
      - zeppelin-network

networks:
  zeppelin-network:
    driver: bridge

# Executar
docker-compose up -d

Exemplo de Notebook - Spark SQL

// Célula 1: Configuração Spark
%spark.conf
spark.sql.adaptive.enabled true
spark.sql.adaptive.coalescePartitions.enabled true

// Célula 2: Carregar dados
%spark.sql
CREATE OR REPLACE TEMPORARY VIEW sales USING parquet
OPTIONS (path "/data/sales.parquet")

// Célula 3: Análise de vendas por mês
%spark.sql
SELECT 
    DATE_FORMAT(order_date, 'yyyy-MM') as month,
    SUM(amount) as total_sales,
    COUNT(*) as order_count,
    AVG(amount) as avg_order_value
FROM sales 
WHERE order_date >= '2024-01-01'
GROUP BY DATE_FORMAT(order_date, 'yyyy-MM')
ORDER BY month

// Célula 4: Python para análise avançada
%spark.pyspark
from pyspark.sql.functions import *
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.regression import LinearRegression

# Carregar dados
df = spark.table("sales")

# Preparar features
assembler = VectorAssembler(
    inputCols=["quantity", "discount"],
    outputCol="features"
)

# Treinar modelo
lr = LinearRegression(featuresCol="features", labelCol="amount")
model = lr.fit(assembler.transform(df))

print(f"RMSE: {model.summary.rootMeanSquaredError}")
print(f"R²: {model.summary.r2}")

Visualizações Customizadas

// Célula com visualização customizada
%spark.sql
SELECT 
    category,
    SUM(amount) as revenue,
    COUNT(*) as orders
FROM sales 
GROUP BY category
ORDER BY revenue DESC

// Configuração de visualização (via UI)
{
  "type": "multiBarChart",
  "settings": {
    "xAxis": "category",
    "yAxis": ["revenue", "orders"],
    "group": [],
    "scatter": {}
  }
}

// Visualização com D3.js customizada
%angular

Integração com APIs

# REST API para executar notebooks
# Executar parágrafo
curl -X POST \
  http://localhost:8080/api/notebook/2A94M5J1Z/paragraph/20150210-015259_1403135953 \
  -H 'Content-Type: application/json'

# Obter resultado
curl -X GET \
  http://localhost:8080/api/notebook/2A94M5J1Z/paragraph/20150210-015259_1403135953

# Criar notebook via API
curl -X POST \
  http://localhost:8080/api/notebook \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "API Notebook",
    "paragraphs": [
      {
        "title": "Spark SQL Example",
        "text": "%spark.sql\nSELECT * FROM sales LIMIT 10"
      }
    ]
  }'

# Agendar execução
curl -X POST \
  http://localhost:8080/api/notebook/2A94M5J1Z/cron \
  -H 'Content-Type: application/json' \
  -d '{
    "cron": "0 9 * * MON",
    "releaseResource": true
  }'

Tutoriais Relacionados

🚀 Zeppelin + Spark

Guia completo para usar Zeppelin com Apache Spark.

Ver Tutorial
📊 Data Visualization

Criando visualizações avançadas com Zeppelin.

Ver Tutorial

Comparações

Apache Zeppelin vs Principais Concorrentes

Critério Apache Zeppelin Jupyter Notebook Databricks Apache Superset
Custo Gratuito Gratuito $$$ Gratuito
Integração Spark ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
Multi-linguagem ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐
Visualizações Built-in ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
Colaboração ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐

Matriz de Decisão

✅ Escolha Zeppelin se:
  • Usa Apache Spark intensivamente
  • Precisa de multi-linguagem no mesmo notebook
  • Quer visualizações automáticas
  • Trabalha com ecossistema Hadoop
  • Precisa de colaboração web-based
  • Quer interface mais amigável que Jupyter
⚠️ Considere alternativas se:
  • Foco principal é Python (Jupyter)
  • Precisa de debugging avançado
  • Quer ecossistema mais maduro
  • Trabalha principalmente com dados pequenos
  • Precisa de extensões específicas
  • Quer solução enterprise (Databricks)
📊 Informações Técnicas
Versão Atual:0.11.0
Licença:Apache 2.0
Linguagem:Java, Scala
Plataforma:Web, Docker
Empresa:Apache Foundation
🎯 Tecnologias Relacionadas