DataHub Presto 元数据接入指南:Connector 配置、能力边界与 Presto-on-Hive 选型实践 DataHub Presto 元数据接入指南Connector 配置、能力边界与 Presto-on-Hive 选型实践【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本文以 DataHub 开源仓库中 Presto 数据源官方文档为主体结合 presto.py 与 trino.py 源码实现展开系统讲解如何将 Presto 的表、视图、字段 Schema 与数据画像Profiling摄入 DataHub并重点厘清「Presto Connector」与「Hive Metastore Connectorpresto 模式」两条接入路径的能力差异与选型依据。读完本文你将掌握 Presto 源的完整配置方式含 LDAP、HTTPS、Kerberos 等认证、目录/模式/表三级过滤、平台实例隔离、数据画像调优、stateful ingestion 增量摄入以及从废弃的presto-on-hive源迁移到hive-metastore源的具体步骤。一、Presto 源概览Presto 是一个用于查询和分析型/操作型数据的分布式 SQL 引擎。DataHub 的presto模块专门负责从 Presto 中提取元数据并写入 DataHub面向生产环境中的元数据摄入工作流production ingestion workflows。从仓库中的概念映射README.md可以看到DataHub 对 Presto 的集成覆盖了以下核心元数据实体Dataset表/视图核心摄入的技术资产SchemaField字段/列随 Schema 提取一并摄入Container数据库/目录、Schema用于在平台上下文内组织资产Platform Instance多集群场景下的平台实例隔离Lineage表级/列级由支持并开启血缘提取的模块产出OwnershipCorpUser/CorpGroup由支持所有权与身份元数据的模块产出。在源码层面Presto 源定义于 presto.pyPrestoConfig继承自TrinoConfig默认scheme为prestoPrestoSource继承自TrinoSource并在__init__中显式传入platformpresto因为该源继承自 Trino 源必须覆盖平台名。该源当前标记为GAGeneral Availability支持状态并通过 capability 装饰器声明支持 DOMAINS经由domain配置字段与 DATA_PROFILING可选启用。platform_name(Presto, doc_order1) config_class(PrestoConfig) support_status(SupportStatus.GA) capability(SourceCapability.DOMAINS, Supported via the domain config field) capability(SourceCapability.DATA_PROFILING, Optionally enabled via configuration) class PrestoSource(TrinoSource):重要说明presto模块从trino模块继承了绝大部分实现。因此trino.py 中的配置字段如catalog_to_connector_details、ingest_lineage_to_connectors、include_column_lineage、trino_as_primary等同样适用于 Presto 源阅读本文时可将 Trino 的底层机制视为 Presto 的共享实现细节。二、两种接入路径Presto Connector vs. Presto-on-Hive将 Presto 元数据摄入 DataHub 有两条不同的路径取决于你的使用场景方案一Presto Connector本文主角适用场景需要直接连接 Presto从所有 catalog而不只是 Hive提取元数据。能力清单从所有 Presto catalogHive、PostgreSQL、MySQL、Cassandra 等提取表和视图支持表与视图元数据支持数据画像data profiling提取视图 SQL 定义不支持存储血缘storage lineage——因为无法访问底层存储位置对复杂的 Presto 特有 SQL视图血缘支持有限。最小配置source: type: presto # ← 本 Connector config: host_port: presto-coordinator.company.com:8080 username: datahub_user password: ${PRESTO_PASSWORD}方案二Hive Metastore Connectorpresto 模式适用场景需要摄入使用 Hive metastore 的 Presto 视图并且需要存储血缘。能力清单提取存储在 Hive metastore 中的 Presto 视图支持存储血缘从 S3/HDFS/Azure 到 Hive 表再到 Presto 视图的完整链路更好的 Presto 视图定义解析支持列级血缘提取速度更快直接访问数据库仅适用于 Hive-backed catalog。配置示例source: type: hive-metastore # ← 需要存储血缘时使用 config: host_port: metastore-db.company.com:5432 database: metastore scheme: postgresqlpsycopg2 mode: presto # ← 将 mode 设为 presto # 启用存储血缘 emit_storage_lineage: true hive_storage_lineage_direction: upstream完整细节参见 Hive Metastore Connector 文档仓库路径metadata-ingestion/docs/sources/hive-metastore。相关文档速查Presto 配置示例Hive Metastore Connector —— Presto-on-Hive 场景含存储血缘Trino Connector —— 面向 TrinoPresto 的继任者的同类 ConnectorPyHive —— 底层连接库pip install pyhive通过sqlalchemy_presto提供 Presto 方言支持源码印证视图定义为何能提取presto源之所以能提取视图 SQL 定义是因为它在 presto.py 中覆写了 Presto 方言的两个反射方法get_view_names由于 Presto 的information_schema.views不会返回视图源码改为查询information_schema.tables中table_type VIEW的记录get_view_definitionPyHive 的 Presto 驱动不返回视图定义因此源码通过执行SHOW CREATE VIEW schema.view_name显式获取。这两个方法分别通过PrestoDialect.get_view_names get_view_names与PrestoDialect.get_view_definition get_view_definition挂载到 PyHive 的 SQLAlchemy 方言上presto.py。而表名获取get_table_names排除 VIEW 类型、列信息_get_columns、表注释get_table_comment则直接复用 Trino 源在 trino.py 中的实现统一通过information_schema查询完成。注意由于 Presto 方言会把catalog_name作为一列返回源码在 presto.py 中针对system.metadata.catalogs做了一个 workaround生成 catalog → connector 的映射字典值为空字符串避免在读取 catalog 信息时失败。三、前置条件Prerequisites在配置 Presto 源之前请确认以下三项前置条件网络可达性能够访问 Presto coordinator 的 8080 端口HTTPS 场景为 443用户账号拥有查询元数据权限的 Presto 用户依赖安装安装 PyHive 连接库pip install acryl-datahub[presto]最小权限建议DataHub 使用的 Presto 账号只需最小权限-- Presto 使用 catalog 级权限 -- 用户需要对系统信息表具备 SELECT 权限 -- 该权限通常默认授予所有用户建议使用一个只读服务账号read-only service account并授予其访问所有待摄入 catalog 的权限。四、认证方式Authentication4.1 基础认证用户名/密码最常见的认证方式source: type: presto config: host_port: presto.company.com:8080 username: datahub_user password: ${PRESTO_PASSWORD} database: hive # 可选默认 catalog4.2 LDAP 认证source: type: presto config: host_port: presto.company.com:8080 username: datahub_user password: ${LDAP_PASSWORD} database: hive4.3 HTTPS/TLS 连接source: type: presto config: host_port: presto.company.com:443 username: datahub_user password: ${PRESTO_PASSWORD} database: hive options: connect_args: protocol: https4.4 Kerberos 认证适用于启用 Kerberos 的 Presto 集群source: type: presto config: host_port: presto.company.com:8080 database: hive options: connect_args: auth: KERBEROS kerberos_service_name: presto硬性要求运行摄入前需先获取有效的 Kerberos ticket执行kinit需安装 PyKerberos 包。以上认证参数均通过 SQLAlchemy 引擎的connect_args透传给 PyHive 驱动。仓库中的最小可用示例见 presto_recipe.ymlhost_port: localhost:5300、database: dbname、username: foo、password: password可用作接入前的最小连通性验证。五、Catalog / Schema / Table 三级过滤Presto 可以连接多个 catalogHive、PostgreSQL、MySQL 等。务必使用过滤来控制摄入范围避免把system、information_schema等系统级内容摄入 DataHub。Catalog数据库过滤source: type: presto config: host_port: presto.company.com:8080 username: datahub_user # 只摄入指定 catalog database_pattern: allow: - ^hive$ - ^postgresql$ deny: - system - information_schemaSchema 过滤source: type: presto config: host_port: presto.company.com:8080 username: datahub_user database: hive # 默认 catalog # 过滤 catalog 内的 schema schema_pattern: allow: - ^production_.* - analytics deny: - .*_test$Table 过滤source: type: presto config: host_port: presto.company.com:8080 username: datahub_user # 过滤具体表 table_pattern: allow: - ^fact_.* - ^dim_.* deny: - .*_tmp$ - .*_staging$从源码看TrinoConfig继承自BasicSQLAlchemyConfigtrino.py因此database_pattern、schema_pattern、table_pattern等均来自通用的 SQL 源配置基类语法与 DataHub 其他 SQL 源保持一致。六、多集群场景Platform Instances当需要从多个 Presto 集群摄入元数据时使用platform_instance进行隔离source: type: presto config: host_port: prod-presto.company.com:8080 platform_instance: prod-presto这会生成形如以下的 URNurn:li:dataset:(urn:li:dataPlatform:presto,catalog.schema.table,prod-presto)平台实例机制同样继承自PlatformInstanceConfigMixin见 trino.py确保不同集群的同名资产在 DataHub 中互不冲突。七、数据画像Data ProfilingPresto Connector 支持可选的数据画像功能source: type: presto config: host_port: presto.company.com:8080 username: datahub_user # 启用画像 profiling: enabled: true profile_table_level_only: false # 是否仅做表级统计false 包含列级统计 # 限制画像范围 profile_pattern: allow: - ^production_.*警告在大型表上执行画像可能非常消耗资源。建议先用profile_table_level_only: true起步再视需要逐步放开到列级统计。数据画像与复杂类型的底层支持从 trino.py 可以看到Presto/Trino 源注册了若干自定义类型映射register_custom_type(datatype.ROW, RecordTypeClass) register_custom_type(datatype.MAP, MapTypeClass) register_custom_type(datatype.DOUBLE, NumberTypeClass) # 当 trino sqlalchemy 方言 0.317.0 时 register_custom_type(datatype.JSON, RecordTypeClass)同时TrinoSource.get_schema_fields_for_columntrino.py针对ROW、ARRAY、MAP等复杂类型会将列展开为带子字段的嵌套 SchemaField通过 Avro 中间表示转换使 Presto 的 struct/array/map 类型在 DataHub 的 Schema 面板中得以完整呈现。八、性能优化与大规模部署8.1 大型 Presto 部署的三种手段对于 catalog 和表数量很多的 Presto 集群Catalog 过滤将摄入限制到指定 catalogdatabase_pattern: allow: - hive - postgresql关闭或收窄画像范围profiling: enabled: true profile_table_level_only: true启用 Stateful Ingestion有状态摄入后续运行只处理变更stateful_ingestion: enabled: true remove_stale_metadata: trueremove_stale_metadata: true还允许在源侧删除元数据时同步清理 DataHub 中已不存在的资产避免幽灵资产。8.2 查询性能注意点Connector 会查询 Presto 的information_schema表确保 Presto 集群有足够资源承载摄入查询大型部署建议在非高峰时段运行摄入任务。九、从 deprecatedpresto-on-hive源迁移如果你正在使用已废弃的presto-on-hive源旧配置source: type: presto-on-hive # ← 已废弃 config: host_port: metastore-db:3306 # ...新配置推荐source: type: hive-metastore # ← 改用这个 config: host_port: metastore-db:3306 mode: presto # ← 将 mode 设为 presto emit_storage_lineage: true # ← 现在可用 # ...迁移收益获得存储血缘storage lineage能力更好的 Presto 视图解析性能提升处于活跃维护期、持续获得新特性。十、选型对比prestovs.hive-metastoremode: presto特性prestoConnectorhive-metastoremode: presto连接方式直连 Presto直连 metastore 数据库Catalog 覆盖所有 Presto catalog仅 Hive-backed catalog存储血缘不支持支持列级血缘有限完整支持视图解析基础增强的 Presto 视图解析性能良好更优直接访问数据库数据画像支持不支持适用场景多 catalog Presto需要血缘的 Presto-on-Hive血缘机制的源码补充需要说明的是prestoConnector 虽不提供存储血缘但其底层 Trino 实现支持一种「Presto/Trino 数据集 ↔ 底层 Connector 数据集」的上游血缘与 Sibling 关联机制trino.py通过查询system.metadata.catalogs获取 catalog → connector 类型映射如 hive、iceberg、mysql、postgresql、bigquery 等见KNOWN_CONNECTOR_PLATFORM_MAPPING由catalog_to_connector_details配置字段补充 connector 侧的connector_database、connector_platform、platform_instance与env信息对每个表/视图通过_emit_connector_lineage生成Siblings兄弟资产与UpstreamLineage上游血缘两类 WorkUnit当include_column_lineage: true且 Schema 可用时会进一步生成fineGrainedLineages列级血缘将 Presto/Trino 侧每个字段 1:1 映射到 connector 侧数据集字段可通过ingest_lineage_to_connectors: false关闭该血缘摄入或通过trino_as_primary控制兄弟资产的主从关系。换言之若你的 Presto 底层是 Hive/Iceberg 等 connector且希望体现「Presto 视图/表读取自底层存储」的语义除了文档推荐的hive-metastore路径外也可以通过catalog_to_connector_details配置让presto源输出表级/列级上游血缘。这属于继承自 Trino 的实验性能力建议在测试环境验证后再用于生产。十一、最佳实践Best Practices选对 Connector多 catalog Presto 部署 → 用presto需要存储血缘的 Hive-backed 表 → 用hive-metastoremode: presto。合理过滤排除系统 catalogsystem、information_schema用 pattern 只纳入相关数据。启用 Stateful Ingestion后续运行只处理变更缩短摄入时长、降低资源消耗。先小范围测试先摄入一小部分 catalog/schema验证元数据质量后再扩大范围。监控 Presto 负载摄入查询可能影响 Presto 性能大型部署尽量安排在非高峰时段。十二、限制LimitationsConnector 行为受限于源端 API、权限及平台暴露的元数据具体请以能力表为准存储血缘不支持Presto Connector 无法提取存储血缘因为它无法访问底层存储位置。解决方案对 Hive 支撑的 Presto 视图改用 Hive Metastore Connector 并设置mode: presto获取存储血缘。视图定义简单视图完全支持可提取 SQL复杂 Presto 视图包含 Presto 特有 SQL 函数的视图血缘提取可能受限跨 catalog 视图引用多个 catalog 的视图受支持。Connector 特有表Presto 的各 catalog connectorHive、PostgreSQL 等暴露的元数据可能各不相同。本 Connector 提取的是对所有 connector 通用的公共元数据。十三、故障排查Troubleshooting13.1 常见问题速览Information Schema 延迟Presto 的information_schema可能延迟反映近期的 DDL 变更结果集过大catalog 含 10,000 张表时摄入可能缓慢视图血缘解析含窗口函数、CTE 或 Presto 特有语法的复杂 SQL血缘可能不完整Connector 特有元数据部分 Presto connector如 Cassandra通过information_schema暴露的元数据有限。13.2 连接问题现象Could not connect to Presto排查确认host_port正确并指向 Presto coordinator检查防火墙规则是否放行 Presto 端口确认 Presto 服务运行中curl http://host:port/v1/info查看 Presto 日志中的连接错误。13.3 认证失败现象Authentication failed排查核对用户名和密码是否正确确认认证方式与 Presto 配置匹配Kerberos 场景确保存在有效 ticketklist查看 Presto coordinator 日志/var/log/presto/。13.4 缺少 Catalog 或表现象部分 catalog/表没有出现在 DataHub 中排查在 Presto 中执行SHOW CATALOGS;确认用户是否有权限访问相关 catalog检查是否被database_pattern过滤确认 Presto 中 catalog connector 配置正确查看 DataHub 摄入日志中的警告信息。13.5 摄入缓慢现象元数据提取耗时过长排查用 catalog/schema 过滤缩小范围关闭画像或只对特定表画像启用 stateful ingestion确保 Presto 集群资源充足检查 Presto 查询队列与资源组resource groups。13.6 视图血缘不出现现象Presto 视图没有血缘排查复杂 Presto SQL 的血缘提取能力有限对 Hive-backed 视图考虑改用 Hive Metastore Connectormode: presto查看日志中的 SQL 解析警告条件允许时简化视图定义。13.7 兜底排查顺序如果摄入失败先验证凭据、权限、连通性与范围过滤再结合摄入日志中的 source 专属错误逐项调整配置。十四、完整可运行配置模板综合以上章节一个生产级 Presto 摄入配置模板如下可直接对照 presto_recipe.yml 扩展source: type: presto config: # 连接坐标 host_port: presto-coordinator.company.com:8080 # HTTPS 时为 443 database: hive # 默认 catalog # 凭据建议通过环境变量注入 username: datahub_user password: ${PRESTO_PASSWORD} # 多集群隔离 platform_instance: prod-presto # 三级过滤 database_pattern: allow: [^hive$, ^postgresql$] deny: [system, information_schema] schema_pattern: allow: [^production_.*, analytics] deny: [.*_test$] table_pattern: allow: [^fact_.*, ^dim_.*] deny: [.*_tmp$, .*_staging$] # 画像视资源情况开启 profiling: enabled: true profile_table_level_only: true profile_pattern: allow: [^production_.*] # 增量摄入与过期清理 stateful_ingestion: enabled: true remove_stale_metadata: true # 可选HTTPS / Kerberos # options: # connect_args: # protocol: https # # auth: KERBEROS # # kerberos_service_name: presto sink: # sink 配置如 datahub-rest / datahub-kafka总结prestoConnector 是 DataHub 面向多 catalog Presto 部署的主力元数据源它通过 PyHive 直连 Presto coordinator基于information_schema提取表、视图与列 Schema支持数据画像与完整的多级过滤且因其继承自TrinoSource天然共享 Trino 源的表属性、复杂类型展开与 connector 血缘等成熟能力。当业务需要存储血缘或更完整的视图解析时则应切换到hive-metastoremode: presto路径。接入时请牢记三条主线选对路径、配好过滤、控制画像范围即可在数据规模增长时保持稳定高效的元数据摄入。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考