Notebooks interativos para análise de dados e visualização
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.
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.
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.
Notebooks web interativos com suporte a múltiplas linguagens no mesmo documento.
Integração nativa com Apache Spark, incluindo Spark SQL, Streaming e MLlib.
Visualizações automáticas de dados com gráficos interativos e customizáveis.
Sistema de interpreters extensível para suporte a novas linguagens e sistemas.
Compartilhamento de notebooks, comentários e controle de versão integrado.
Execução agendada de notebooks com integração a sistemas de workflow.
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 |
Exploração interativa de grandes datasets usando Spark com visualizações automáticas.
Desenvolvimento e teste de modelos de ML usando Spark MLlib e Python.
Criação de relatórios dinâmicos com parâmetros e visualizações interativas.
Ensino de conceitos de Big Data e Data Science com exemplos práticos.
Desenvolvimento e documentação de pipelines de processamento de dados.
# 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 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
// 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}")
// 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
# 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
}'
Critério | Apache Zeppelin | Jupyter Notebook | Databricks | Apache Superset |
---|---|---|---|---|
Custo | Gratuito | Gratuito | $$$ | Gratuito |
Integração Spark | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
Multi-linguagem | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
Visualizações Built-in | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
Colaboração | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
Versão Atual: | 0.11.0 |
Licença: | Apache 2.0 |
Linguagem: | Java, Scala |
Plataforma: | Web, Docker |
Empresa: | Apache Foundation |