Apache DataHub集成AWS Glue数据血缘实战指南

核心摘要

  • 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服务深度集成的定制化方案,实现全链路数据血缘可视化管理。

AWS账单代付

AWS/阿里云/谷歌云官方认证架构师,专注云计算解决方案。