DataHub元数据平台从零到生产:部署、数据摄入与运维全记录
【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub
团队里的表涨到几百张之后,问题基本都会出现:没人说得清哪张表还在用、哪些字段装着敏感数据、出问题该找谁。新人想做一次用户分析,只能挨个问同事。DataHub解决的就是这类元数据混乱——它是一个开源的元数据管理平台,把数据库、数据仓库、BI 工具和任务编排系统里的元数据拉进统一目录,提供搜索、数据血缘和治理能力,任何一张表变了,你能顺藤摸瓜看到上下游影响。
跑起来的路径不长:装一个 Python CLI,一条命令拉起整套容器,再写几行 YAML 就开始摄入自己的数据。下面是从零开始的完整过程,从确认依赖到摄入第一张 MySQL 表。
跑之前先确认这 3 样东西和一条启动命令
DataHub 的 quickstart 模式用 Docker Compose 一次性拉起完整服务栈:GMS(元数据服务)、React 前端、Kafka、OpenSearch 搜索引擎和 MySQL 元数据库。跑之前确认下表里的依赖即可:
| 依赖 | 最低版本 | 验证命令 |
|---|---|---|
| Docker + Compose v2 | Docker 20.10+,Compose 2.20+ | docker compose version |
| Python | 3.10+ | python3 --version |
| 内存 | 分配 8GB 给 Docker | docker system info |
官方验证过的配置是 2 CPU / 8GB 内存 / 13GB 磁盘。内存给不够的典型症状是 GMS 一直起不来、容器反复重启,先查 Docker 引擎的内存上限,而不是怀疑 DataHub 本身。
安装 CLI 并启动整套服务:
# 安装 DataHub CLI(需要 Python 3.10+) python3 -m pip install --upgrade acryl-datahub datahub version # 验证安装,输出版本号即成功 # 一条命令启动完整服务栈 datahub docker quickstart一切顺利的话,最后一行是 "✔ DataHub is now running"。用到的 compose 文件会自动落到~/.datahub/quickstart/,后面想改配置直接编辑它。想锁定某个版本就加--version参数;默认前端端口 9002 被占用的话,用DATAHUB_MAPPED_FRONTEND_PORT环境变量覆盖。
浏览器打开 http://localhost:9002,用默认账号datahub / datahub登录,能看到一个空的前端。跑通之后第一件事是改掉默认口令,官方有专门章节:docs/authentication/changing-default-credentials.md。
上图是 DataHub 在数据栈中的位置:左边是各种数据源,元数据通过 push / pull 进入平台;右边是 GraphQL、REST、Kafka 三类接口,供下游应用消费。CLI 的所有命令本质上也是走这些接口。
第一次用 DataHub:载入样例数据并试一遍完整搜索
空目录没有价值,先载入官方样例数据:
# 让 CLI 指向本地 DataHub 实例(生产环境换成实际凭据) datahub init --username datahub --password datahub # 载入样例数据:约 1050 个实体,覆盖 Snowflake/Looker/PowerBI/Tableau datahub datapack load showcase-ecommerce跑完刷新前端,你会看到一个内容完整的目录:带负责人、术语标签、域、数据产品,还有连好的血缘关系。这份样例数据适合把前端功能挨个摸一遍。
然后是搜索。前端搜索框支持自然关键词,也支持精确语法:platform:snowflake按数据平台过滤,fieldPaths: customer_id按字段名找字段,-test排除,还能用 AND/OR/NOT 组合。结果页左侧有平台、标签、负责人等过滤维度,点选即可继续收窄。命令行里是同一套能力:
# 关键词搜索 datahub search "customer" # 按平台与实体类型过滤 datahub search "*" --filter platform=snowflake --filter entity_type=dataset预期你会看到返回一张符合条件的数据集列表。点开其中一张表的详情页,schema、负责人、标签、血缘图、变更历史都会出现,这个"实体档案"页是日常用得最多的地方。点血缘图上的节点可以跳到上游或下游的表,从源头表一路点到 BI 报表,把整条链路走一遍。
不同实体类型(Dataset、Dashboard、User 等)之所以能用同一套页面统一管理,靠的是前端的实体注册表层,相关代码在datahub-web-react/。
接入你自己的数据源:3 个最常用摄入场景的完整配置
摸熟之后就该摄入自己的数据了。配置套路是统一的:写一个 YAML 配方文件,source声明数据从哪来,sink声明往哪送,中间用datahub ingest执行。核心 CLI 只内置了少量连接器,先装对应插件,比如pip install 'acryl-datahub[mysql,snowflake]'。
同步 MySQL 元数据的完整配置
大多数团队可以先从几张小表开始,见效最快:
source: type: mysql config: host_port: localhost:3306 # 改:MySQL 地址和端口 database: datahub # 改:要同步的库名 username: datahub # 改:建议用只读账号 password: datahub # 改:密码 sink: type: datahub-rest config: server: http://localhost:8080 # quickstart 默认地址,可保持同步 Snowflake 数仓的完整配置
数仓用户的主力一般是 Snowflake 或 BigQuery,配置长得一样,换连接信息即可:
source: type: snowflake config: account_id: your_account # 改:Snowflake 账号 username: your_user # 改:登录用户 password: your_password # 改:密码 role: SYSADMIN # 没有专用角色可保持默认 warehouse: COMPUTE_WH # 改:使用的仓库 email_domain: mycompany.com # 可选:按邮箱域自动关联负责人 sink: type: datahub-rest config: server: http://localhost:8080只想要一部分表的话,在 source 配置里加include_tables过滤即可。
dbt 血缘只需要指两个文件
团队如果已经在用 dbt,最有价值的元数据是它算好的模型血缘,不用重新解析 SQL,指向 target 目录下的两个文件就行:
source: type: dbt config: manifest_path: ./target/manifest.json # 改:dbt manifest 文件路径 catalog_path: ./target/catalog.json # 改:dbt catalog 文件路径 target_platform: bigquery # 改:底层仓库平台 sink: type: datahub-rest config: server: http://localhost:8080三个配方跑法都一样:
# 先 --dry-run 校验配置,不会写入数据 datahub ingest -c mysql_recipe.yaml --dry-run # 正式运行,成功后输出报告:实体数、耗时、错误列表 datahub ingest -c mysql_recipe.yaml跑成功后,前端就能看到新表,报告里的错误列表会精确到是哪张表失败、为什么失败。摄入管道可以做成定时任务,仓库里metadata-ingestion-modules/airflow-plugin/有现成的 Airflow 插件;不想写代码的话,前端 Ingestion 页面里配数据源、直接跑也行。
从能跑到跑得稳:你大概率会遇到的三个问题
搜索出不来结果,或者明显变慢。先验证搜索引擎的健康状态,一条命令:
curl -s http://localhost:9200/_cluster/health # status 为 green 即正常如果不是 green,或查询普遍慢,九成是内存问题。把分给 OpenSearch 的内存提到 4G 以上,或者先调大 Docker 引擎的整体内存上限,然后停掉实例再重启:datahub docker quickstart --stop,再执行一次 quickstart。
摄入任务失败,或报告里带错误。别猜,先用--dry-run确认配置本身没问题,再看报告里的错误列表。高频原因就两类:数据源账号权限不够(给只读 SELECT 即可),或者跑摄入的机器连不上数据源(查网络和安全组)。需要更细的日志就加--debug参数重跑。
要升级或动大配置之前,先备份。quickstart 自带备份命令:
# 升级前先做全量备份 datahub docker quickstart --backup从很老的 CLI 版本升级时,流程是:先备份,再datahub docker nuke清掉旧环境,然后重新 quickstart。跳过备份的话,已有数据全部丢失。生产环境用 Kubernetes 部署的,看docs/deploy/kubernetes.md。
踩坑速查:3 个高频问题一张表看完
| 问题现象 | 大概率原因 | 处理动作 |
|---|---|---|
| quickstart 后容器反复重启,GMS 迟迟不健康 | Docker 分配内存不足 | 内存提到 8G 以上,重新 quickstart |
datahub: command not found | CLI 没进 PATH,或装在 Python 2 上 | 改用python3 -m datahub version;仍报错就在 Python 3.10+ 重装 |
| 摄入报告显示 0 新增 / 连接超时 | 数据源权限不足或网络不通 | 确认账号有只读权限,从摄入机器测数据源连通性 |
长尾问题不在这篇里展开,官方排障章节更系统:docs/troubleshooting/quickstart.md和docs/troubleshooting/general.md。
还想往深了玩:插件、元数据模型与 AI 的入口
默认实体和功能覆盖不了需求时,常见的扩展方向有三个。一是自定义元数据模型:数据模型用 PDL 定义,源码在metadata-models/src/,入门指南看docs/modeling/extending-the-metadata-model.md。二是写自己的数据源插件:Python 连接器都在metadata-ingestion/src/datahub/ingestion/下,照着metadata-ingestion/adding-source.md抄一个就能跑。三是接 AI:DataHub 提供 MCP 集成层datahub-agent-context/,可以把 Cursor、Claude Desktop 这类工具挂到目录上,还有开源的分析 agent,用自然语言问数、直接返回 SQL 和图表。
从一个能跑的实例到全队在用的数据资产平台,关键是把第一条摄入管道跑通,之后每加一个数据源、每补一批标签和负责人,目录就会更完整一分。
【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考