Superset 在 CDH/Kerberos (Cloudera CMP 7.3(类 CDP 的 CMP 7.13 平台,华为鲲鹏 ARM 版))docker-compose.yml、Redis
本文提供了在CDH/Kerberos环境下部署Apache Superset的完整Docker方案,支持Redis/Celery集成和自动Kerberos认证。主要内容包括: 项目结构说明:包含Dockerfile、Kerberos配置文件和自定义superset_config.py 完整的docker-compose.yml示例:包含Superset主服务、Celery Worker和Beat调
Superset 在 CDH/Kerberos (Cloudera CMP 7.3(类 CDP 的 CMP 7.13 平台,如华为鲲鹏 ARM 版))docker-compose.yml 示例 与 Redis/Celery 集成方案
完整的 docker-compose.yml 示例,包含 Apache Superset + Redis(作为 Celery Broker/Result Backend)+ 自动 Kerberos 认证支持,适用于 CDH 或华为 MRS 环境下连接 Hive/Impala 的生产级部署。
📁 推荐项目结构
Text:
superset-cdh-kerberos/
├── docker-compose.yml
├── superset/
│ ├── Dockerfile
│ ├── krb5.conf
│ ├── superset.keytab # 由集群管理员生成
│ ├── superset_config.py
│ └── entrypoint.sh
└── .env # 环境变量(可选)
✅ docker-compose.yml
Yaml:
version: '3.8'
services:
redis:
image: redis:7-alpine
container_name: superset-redis
restart: unless-stopped
networks:
- superset-net
superset:
build:
context: ./superset
dockerfile: Dockerfile
container_name: superset-app
restart: unless-stopped
ports:
- "8088:8088"
environment:
- BROKER_URL=redis://redis:6379/0
- RESULT_BACKEND=redis://redis:6379/0
- SUPERSET_SECRET_KEY=your_strong_secret_key_here_2025!
volumes:
- superset_home:/app/superset
- ./superset/logs:/app/logs
depends_on:
- redis
networks:
- superset-net
superset-worker:
build:
context: ./superset
dockerfile: Dockerfile
container_name: superset-worker
restart: unless-stopped
command: celery --app=superset.tasks.celery_app:celery worker --pool=prefork -O fair -l INFO
environment:
- BROKER_URL=redis://redis:6379/0
- RESULT_BACKEND=redis://redis:6379/0
volumes:
- superset_home:/app/superset
- ./superset/logs:/app/logs
depends_on:
- redis
networks:
- superset-net
superset-beat:
build:
context: ./superset
dockerfile: Dockerfile
container_name: superset-beat
restart: unless-stopped
command: celery --app=superset.tasks.celery_app:celery beat --max-interval 10 -l INFO
environment:
- BROKER_URL=redis://redis:6379/0
- RESULT_BACKEND=redis://redis:6379/0
volumes:
- superset_home:/app/superset
- ./superset/logs:/app/logs
depends_on:
- redis
networks:
- superset-net
volumes:
superset_home:
networks:
superset-net:
driver: bridge
💡 说明:
- superset:主 Web 应用(Gunicorn)
- superset-worker:执行异步查询、邮件发送、缓存预热等后台任务
- superset-beat:定时调度器(用于定期刷新缓存、发送报表等)
- 所有服务共享同一个镜像,确保依赖一致
🔧 补充:superset_config.py(增强 Celery 配置)
在 ./superset/superset_config.py 中添加:
Python:
import os
from celery.schedules import crontab
# 启用异步查询和告警
FEATURE_FLAGS = {
"ALERT_REPORTS": True,
"ENABLE_TEMPLATE_PROCESSING": True,
"DYNAMIC_PLUGINS": False,
}
# Celery 配置
class CeleryConfig:
broker_url = os.getenv("BROKER_URL", "redis://redis:6379/0")
result_backend = os.getenv("RESULT_BACKEND", "redis://redis:6379/0")
accept_content = ["json"]
task_serializer = "json"
result_serializer = "json"
worker_prefetch_multiplier = 1
task_acks_late = True
beat_schedule = {
# 每5分钟检查一次待发送的报表
"reports.scheduler": {
"task": "reports.scheduler",
"schedule": crontab(minute="*/5"),
},
# 每小时预热常用图表缓存
"cache-warmup": {
"task": "cache-warmup",
"schedule": crontab(minute=0, hour="*"),
"kwargs": {"strategy_name": "top_views"},
},
}
CELERY_CONFIG = CeleryConfig
# 安全密钥(建议通过环境变量传入)
SECRET_KEY = os.getenv("SUPERSET_SECRET_KEY", "this-is-insecure-change-it")
# 可选:设置 SQL Lab 查询超时(秒)
SQLLAB_ASYNC_TIME_LIMIT_SEC = 3600
🛠️ 构建与启动
1. 准备文件
- 确保 ./superset/superset.keytab 和 krb5.conf 已就位;
- 修改 krb5.conf 中的 Realm 和 KDC 地址;
- 设置强密码 SUPERSET_SECRET_KEY(至少 32 位随机字符串);
2. 构建并启动
Bash:
# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f superset
3. 首次初始化(可选)
如果未在 entrypoint.sh 中自动初始化,可手动执行:
Bash:
docker exec -it superset-app superset fab create-admin
docker exec -it superset-app superset init
🔌 连接 Hive/Impala(Kerberos 方式)
在 Superset Web UI 中添加数据源:
Hive (CDH / MRS)
Text:
hive://superset@YOUR.REALM@hive-server-host:10000/default?auth=KERBEROS;kerberos_service_name=hive
Impala (CDH / MRS)
Text:
impala://impala-host:21050/default?auth_mechanism=GSSAPI;kerberos_service_name=impala
✅ 此时无需用户名密码,Superset 进程已通过 keytab 自动获取 TGT。
📊 异步查询验证
- 进入 SQL Lab;
- 选择 Hive/Impala 数据库;
- 勾选 “Run as asynchronous query”;
- 执行长查询 → 应显示“Query submitted”并进入后台执行;
- 查看 superset-worker 日志确认任务被消费。
🔄 自动续期 Kerberos Ticket(已在 entrypoint.sh 实现)
Bash:
# 在 entrypoint.sh 中加入后台循环
(
while true; do
sleep 25200 # 7 小时
kinit -R || kinit -k -t /home/superset/superset.keytab superset@YOUR.REALM
done
) &
⚠️ 注意:TGT 默认有效期通常为 10 小时,renewable 为 7 天。每 7 小时续期一次可确保长期运行不中断。
✅ 适用场景
- CDH 5.16 / 6.x / CDP
- 华为云 MRS 3.x(启用了 Kerberos + Hive/Impala)
- 政务、金融、电信等高安全要求场景
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)