开源的现代数据探索和可视化平台:Apache Superset 架构组件和安装方式 Kubernetes Docker Compose PyPI

发布于:2025-08-05 ⋅ 阅读:(13) ⋅ 点赞:(0)

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Apache Superset
Apache Superset™ 是一个开源的现代数据探索和可视化平台。对于许多团队来说,Superset 可以取代或增强专有的商业智能工具。Superset 可以与各种数据源很好地集成。

架构

Architecture

本页面旨在帮助新任管理员理解 Superset 的组成要素。

组件

一套 Superset 安装由以下组件构成:

  1. Superset 应用本身
  2. 元数据数据库
  3. 缓存层(可选,但某些功能必需)
  4. Worker & beat(可选,但某些功能必需)

可选组件及其关联功能

上述可选组件是启用以下功能所必需的:

如果使用 Kubernetes 或 Docker Compose 安装,上述所有组件都会被创建。

然而,通过 PyPI 安装仅会创建应用本身。通过 PyPI 安装的用户,如需启用上述功能,需自行配置缓存层、worker 和 beat。PyPI 安装中这些组件的配置不在本文档当前覆盖范围内。

以下是各组件的进一步详情。

Superset 应用

这是核心应用。Superset 的运作流程如下:

  • 用户访问图表或仪表板
  • 该操作触发向保存底层数据集的数据仓库发送 SQL 查询
  • 结果数据以数据可视化形式呈现
  • Superset 应用由 Python(Flask)后端应用(服务器)、API 层和通过 Webpack 构建的 React 前端,以及应用运行所需的静态资产组成

元数据数据库

此处存储图表和仪表板定义、用户信息、日志等。Superset 已测试可与 PostgreSQL 和 MySQL 数据库作为元数据数据库协同工作(请勿与数据源混淆,后者可以是如 Snowflake、Redshift 等更多种类的选项)。

一些安装方式(如我们的 Quickstart 和 PyPI)默认配置为使用 SQLite 本地数据库。在 Docker Compose 安装中,数据将存储在 PostgreSQL 容器卷中。这两种情况均不推荐用于生产环境的 Superset 实例。

对于生产环境,建议使用经过适当配置的独立托管数据库。无论使用何种数据库,都应定期备份。

缓存层

缓存层主要发挥两个作用:

  • 存储对数据仓库的查询结果,使得图表第二次加载时从缓存中读取,加快应用速度并减轻数据仓库负载。
  • 充当 worker 的消息代理,启用警报与报表、异步查询和缩略图缓存功能。

大多数人使用 Redis 作为缓存,但 Superset 也支持其他选项。详见 缓存文档

Worker 和 Beat

指一个或多个执行任务的 worker,如运行异步查询、生成报表快照并发送邮件,以及一个“beat”,充当调度器并告知 worker 何时执行任务。大多数安装使用 Celery 作为这些组件。

其他组件

其他组件也可以集成到 Superset 中。了解额外配置的最佳位置是 配置页面。例如,可以设置负载均衡器或反向代理,在 Superset 应用前实现 HTTPS,或指定 Mapbox URL 以启用地理空间图表等。

若未建立某些配置设置,Superset 甚至无法启动,因此务必查阅该页面。

安装方式

应该如何安装 Superset?以下是对不同选项的比较。如果您先阅读了架构页面以了解 Superset 的各个组件,会有所帮助。

根本的权衡在于,您是需要自己处理更多细节工作,还是使用更复杂的部署路线来处理这些细节。

Docker Compose

摘要: 利用容器化,同时比 Kubernetes 更简单。这是试用 Superset 的最佳方式;也适用于开发并为 Superset 做出贡献。

如果您不仅仅是演示软件,则需要对 Docker 有中等程度的了解,以自定义部署并避免一些风险。即使经过全面优化,在大规模生产部署方面,这种方法也不如 Kubernetes 稳健。

您需要管理一个 superset-config.py 文件和一个 docker-compose.yml 文件。Docker Compose 会启动所有必要的服务——Superset 应用程序、Postgres 元数据数据库、Redis 缓存、Celery worker 和 beat。它们会自动相互连接。

责任

您需要备份元数据数据库。这可能意味着备份作为 Docker 容器运行的服务及其卷;理想情况下,您应在该容器之外将 Postgres 作为服务运行,并备份该服务。

您还需要扩展 Superset Docker 镜像。默认的 lean 镜像不包含访问元数据数据库(Postgres 或 MySQL)所需的驱动程序,也不包含访问数据仓库所需的驱动程序,以及警报和报告所需的无头浏览器。在演示 Superset 时,您可以运行 -dev 镜像,其中包含部分这些内容,但仍需为数据仓库安装驱动程序。-dev 镜像以 root 身份运行,不建议用于生产环境。

理想情况下,您将构建自己的 Superset 镜像,该镜像扩展自 lean,并添加部署所需的内容。请参阅构建您自己的生产 Docker 镜像

Kubernetes (K8s)

摘要: 这是部署生产 Superset 实例的最佳实践方式,但技能要求最高——需要懂 Kubernetes 的人。

您将 Superset 部署到 K8s 集群中。最常见的方法是使用社区维护的 Helm chart,尽管目前正在实施 SIP-149 - Superset 的 Kubernetes Operator

K8s 部署可以根据使用情况扩展和缩减,并可以零停机部署滚动更新——这些是大型部署所欣赏的功能。

责任

您需要构建自己的 Docker 镜像,并备份元数据数据库,如上所述。您还需要自定义 Helm chart 值,并部署和维护 Kubernetes 集群。

PyPI (Python)

摘要: 这是唯一不需要容器知识的方法。它需要最多的手动工作来部署、连接和维护每个组件。

您将 Superset 作为 Python 包安装并以这种方式运行,提供自己的元数据数据库。Superset 有关于如何以这种方式安装的文档,但更新不频繁。

如果需要缓存,您将设置 Redis 或 RabbitMQ。如果需要警报和报告,您将设置 Celery。

责任

您需要启动组件服务并使其相互通信。您需要安排备份元数据数据库。

升级时,您需要管理系统环境和包,并确保所有组件具有功能依赖项。

升级 Superset

Docker Compose

首先,务必关闭正在运行的 Docker Compose 容器:

docker compose down

接着,通过 git 更新与 superset 仓库同步的文件夹:

git pull origin master

然后,重新启动容器,任何已变更的 Docker 镜像将自动拉取:

docker compose up

手动更新 Superset

要在原生安装中升级 Superset,请运行以下命令:

pip install apache_superset --upgrade

升级元数据数据库

通过运行以下命令迁移元数据数据库:

superset db upgrade
superset init

升级 Superset 不应删除您的图表和仪表板,但我们建议遵循最佳实践,并在升级前备份元数据数据库。在升级生产环境之前,我们建议在测试环境中先进行升级,并最终在非高峰时段完成生产环境的升级。

Docker 构建、镜像与标签

Apache Superset 社区在开发、发布和生产化 Superset 时广泛使用 Docker。本页详细介绍我们的 Docker 构建和标签命名方案,帮助用户了解我们的镜像。

镜像通过 GitHub Actions 构建并推送到 Superset Docker Hub 仓库。不同镜像在不同时间点构建和/或发布:

  • 已发布版本 (release):使用如 5.0.0latest 标签发布。
  • Pull Request 迭代 (pull_request):针对每个 Pull Request,我们主动构建 Docker 以验证构建,但出于安全原因不会发布这些镜像,仅执行 docker build --load
  • 合并到主分支 (push):生成新的 SHA,标签前缀为 master,表示最新的 master 版本。

构建预设

我们提供一组构建“预设”,每个预设代表一组构建参数组合,主要指向不同的构建目标层和/或基础镜像。

以下是可通过 supersetbot docker 工具使用的构建预设:

  • lean:默认 Docker 镜像,包含前端和后端。未指定构建预设的标签均为 lean 构建(如:latest5.0.04.1.2 等)。lean 构建不包含数据库驱动,意味着您需要自行安装。这适用于分析数据库 和元数据数据库。您可能需要根据所选元数据数据库,额外安装 mysqlclientpsycopg2-binary,以及连接到分析数据库所需的其他驱动。
  • dev:用于开发,包含无头浏览器、开发相关工具和 root 权限。此预设包含一些常用数据库驱动,如 mysqlclientpsycopg2-binary 以及其他用于开发/CI 的驱动。
  • py311,例如 Py311:与 lean 类似,但使用不同的 Python 版本(此例中为 3.11)。
  • ci:用于特定 CI 工作负载。
  • websocket:用于支持高级功能的 Superset 集群。
  • dockerize:由 Helm 在 initContainers 中使用,用于等待数据库依赖可用。

关键标签示例

  • latest:最新的官方发布构建
  • latest-dev:最新官方发布构建的 -dev 镜像,包含无头浏览器和 root 权限。
  • master:来自 master 分支的最新构建,隐式为 lean 构建预设
  • master-dev:与 master 类似,但包含无头浏览器和 root 权限。
  • pr-5252:PR 5252 中的最新提交。
  • 30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev:针对此特定 SHA 的构建,可能来自 master 合并或发布。
  • websocket-latest:用于 Superset 集群的 WebSocket 镜像。

如需了解构建矩阵和标签约定的洞察或修改,请查看 supersetbot docker 子命令和 docker.yml GitHub 工作流。

构建您自己的生产 Docker 镜像

每个 Superset 部署将需要根据其数据仓库等安装不同的驱动,因此我们建议用户通过扩展 lean 镜像来构建自己的 Docker 镜像。

以下是一个示例 Dockerfile。请根据内联注释自定义所需的 Superset 版本和数据库驱动。注释还指出需要在配置文件中启用某个功能标志。

您可以使用 docker build -t mysuperset:latest .docker build -t ourcompanysuperset:5.0.0 . 构建镜像。

# 将其更改为 apache/superset:5.0.0 或您想要构建的任何版本;
# 否则默认为 GitHub master 分支的最新提交
FROM apache/superset:master

USER root

# 为 Playwright 设置环境变量
ENV PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers

# 使用 uv 将包安装到虚拟环境中
# Superset 在 4.1 分支之后开始使用 uv;如果您从 apache/superset:4.1.x 或更早版本构建,
# 请将前两行替换为 RUN pip install \
RUN . /app/.venv/bin/activate && \
    uv pip install \
    # 安装 psycopg2 以使用 PostgreSQL 元数据存储 - 如果使用 MySQL 后端,则可能是 MySQL 包:
    psycopg2-binary \
    # 添加您的数据仓库的驱动,在此示例中我们展示 Microsoft SQL Server:
    pymssql \
    # 使用单点登录身份验证所需的包:
    Authlib \
    # openpyxl 用于上传 Excel 文件
    openpyxl \
    # Pillow 用于告警和报告以生成仪表板的 PDF
    Pillow \
    # 安装 Playwright 用于告警和报告的截图。假设功能标志 PLAYWRIGHT_REPORTS_AND_THUMBNAILS 已启用
    # 该功能标志将在 6.0.0 起默认为 True
    # Playwright 仅支持 Chrome。
    # 如果您仍在使用 Selenium 而非 Playwright,则应在此处安装 selenium 包和无头浏览器及 webdriver
    playwright \
    && playwright install-deps \
    && PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers playwright install chromium

# 切换回 superset 用户
USER superset

CMD ["/app/docker/entrypoints/run-server.sh"]

Dockerfile 中的关键 ARG

  • BUILD_TRANSLATIONS:是否将翻译构建到镜像中。对于前端构建,这告诉 webpack 从 moment-timezone 库中剥离除 en 以外的所有语言环境。对于后端,这会跳过编译 *.po 翻译文件
  • DEV_MODE:是否跳过前端构建,这由我们的 docker-compose 开发设置使用
    我们在其中挂载本地卷并使用 webpack--watch 模式进行构建,这意味着当您更改本地文件系统中的代码时,docker 镜像中的 webpack 将持续重建前端。此 ARG 使初始 docker-compose 构建花费更少的时间和资源
  • INCLUDE_CHROMIUM:是否在后台构建中包含 chromium,以便将其用作与“告警和报告”以及缩略图生成相关的工作负载的无头浏览器
  • INCLUDE_FIREFOX:同上,但针对 firefox
  • PY_VER:指定 Python 后端的基础镜像,如果您不处理向前或向后兼容性问题,我们不建议更改此设置

缓存

为加快构建速度,我们遵循 Docker 最佳实践并使用 apache/superset-cache

关于数据库驱动

我们的 Docker 镜像几乎不提供数据库驱动支持,因为
每个环境需要不同的驱动,维护一个具有广泛数据库支持的构建将既具有挑战性(数十种数据库、Python 驱动和操作系统依赖项)又效率低下(构建时间更长、镜像更大、层缓存命中率更低…)。

对于生产用例,我们建议您从我们的 lean 镜像派生并添加所需数据库的支持。

支持不同平台(即 arm64 和 amd64)

目前所有自动构建均为多平台,支持 linux/arm64linux/amd64。这使得 helmdocker compose 等更高级别的构造可以指向这些镜像并有效实现多平台。

Pull Request 和 master 构建是每平台一个镜像,以便可以并行化,这些构建的构建矩阵更为稀疏,因为我们无需在每个平台上构建每个构建预设,通常可以更具选择性。
对于这些构建,我们在适用的情况下使用 -arm 后缀。

使用 Apple 芯片

Apple 当前一代计算机使用基于 ARM 的 CPU,而 MAC 上的 Docker 似乎需要 linux/arm64/v8(至少一位用户的 M2 配置为此方式)。将环境变量 DOCKER_DEFAULT_PLATFORM 设置为 linux/amd64 似乎可以发挥作用,并在此基础上利用 Superset 提供的构建。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

推测 linux/arm64/v8 将更适合这一代芯片,但在 ARM 生态系统中的兼容性较低。

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。


网站公告

今日签到

点亮在社区的每一天
去签到