核心摘要
- Apache DataHub作为开源元数据平台,支持通过Python SDK同步AWS Glue Data Catalog中的数据库和表信息
- 通过集成acryl-spark-lineage插件,可在Glue ETL任务运行时自动捕获表级数据血缘关系
- 完整方案需配置DataHub GMS认证、Glue Network Connection及Spark Listener参数
- 实践建议:生产环境应为OpenSearch分配充足内存,避免OOM导致元数据服务不可用
Apache DataHub集成AWS Glue数据血缘实战指南
为什么需要整合Glue与DataHub
在现代数据湖架构中,Amazon Glue承担着ETL处理和数据目录管理的核心职责,但其原生能力在跨系统数据血缘追踪方面存在局限。Apache DataHub作为LinkedIn开源的元数据管理平台,提供了统一的数据资产发现、血缘可视化和数据治理能力,能够有效弥补这一短板。
从架构设计角度,整合方案分为两个独立的数据流:
- 元数据同步流:通过DataHub Python SDK将Glue Data Catalog的库表结构推送至GMS服务
- 血缘捕获流:在Glue Spark任务中嵌入Lineage插件,实时上报表间依赖关系
环境准备与DataHub部署
基础设施要求
建议使用Amazon Linux 2023实例,实例类型至少选择t3.large以确保OpenSearch组件稳定运行。EC2需具备以下条件:
- 可访问公网(用于拉取Docker镜像和GitHub资源)
- 绑定具有AWSGlueServiceRole权限的IAM Role
- 安全组开放9002端口(Web UI)和8000端口(GMS API)
安装Docker与Python环境
sudo yum update -y
sudo yum install -y docker python3 python3-pip
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
部署DataHub服务
安装DataHub CLI工具并下载编排文件:
pip3 install --upgrade acryl-datahub
curl -SL https://raw.githubusercontent.com/datahub-project/datahub/master/docker/quickstart/docker-compose.quickstart-profile.yml -o docker-compose.yml
关键配置优化——修改docker-compose.yml中的以下参数:
# 启用GMS认证(第68行附近)
METADATA_SERVICE_AUTH_ENABLED: 'true'
# 增加OpenSearch内存配置(第325-328行附近)
memory: '2048m'
OPENSEARCH_JAVA_OPTS: -Xms1024m -Xmx1024m -Dlog4j2.formatMsgNoLookups=true
启动服务并验证:
datahub docker quickstart --quickstart-compose-file docker-compose.yml
访问http://[EC2-IP]:9002,使用默认凭证datahub/datahub登录,在Settings页面创建Access Token备用。
Glue元数据摄入实践
安装Glue摄入插件
pip3 install --upgrade 'acryl-datahub[glue]'
配置摄入脚本
创建glue_ingestion.py文件,核心配置项包括:
from datahub.ingestion.run.pipeline import Pipeline
pipeline = Pipeline.create({
"source": {
"type": "glue",
"config": {
"aws_region": "ap-northeast-1", # 修改为实际Region
}
},
"sink": {
"type": "datahub-rest",
"config": {
"server": "http://localhost:8080", # GMS地址
"token": "your-access-token" # 替换为实际Token
}
}
})
pipeline.run()
pipeline.pretty_print_summary()
执行同步
python3 glue_ingestion.py
成功执行后,可在DataHub的Discover界面查看已同步的Glue表资产。
数据血缘捕获配置
准备测试数据
以纽约出租车数据集为例,在Glue中创建数据库和源表:
CREATE DATABASE IF NOT EXISTS nyc_taxi;
CREATE EXTERNAL TABLE nyc_taxi.yellow_tripdata (
VendorID INT,
tpep_pickup_datetime TIMESTAMP,
tpep_dropoff_datetime TIMESTAMP,
passenger_count INT,
trip_distance DOUBLE
)
STORED AS PARQUET
LOCATION 's3://your-bucket/trip-data/';
配置Spark Lineage插件
将acryl-spark-lineage JAR文件上传至S3:
s3://your-bucket/externalJar/acryl-spark-lineage_2.12-0.2.19-rc2.jar
创建Glue任务
Glue任务配置要点:
- Glue版本:选择3.0,运行时Python 3
- Network Connection:创建Network类型连接,选择与DataHub同VPC的私有子网
- Dependent JARs path:填入Lineage JAR的S3路径
- Job parameters:配置GMS端点和认证Token
在Glue脚本中添加Spark配置:
spark = SparkSession.builder \
.config("spark.extraListeners", "datahub.spark.DatahubSparkListener") \
.config("spark.datahub.rest.server", "http://datahub-gms:8080") \
.config("spark.datahub.rest.token", "your-token") \
.getOrCreate()
验证血缘关系
运行Glue任务后,在DataHub中打开任意相关表的详情页,切换至Lineage标签页,即可查看上下游表的依赖关系图谱。
生产环境建议
基于实践经验,部署生产级DataHub时应注意:
- 使用Amazon OpenSearch Service替代容器化部署,提升稳定性
- 为GMS服务配置Application Load Balancer实现高可用
- 定期执行元数据同步任务,建议通过Amazon EventBridge调度
- 在多账户架构中,考虑使用Cross-Account IAM Role统一采集各账户Glue元数据
需要优化您的 AWS 架构? 如果您正在构建企业级数据治理平台,欢迎联系我们获取DataHub与AWS服务深度集成的定制化方案,实现全链路数据血缘可视化管理。