资讯动态

DataHub Hive 数据源:HiveServer2 元数据采集、认证配置与存储血缘实战指南

发布时间:2026/9/18 23:34:07 来源:尧图企业网站定制
DataHub Hive 数据源HiveServer2 元数据采集、认证配置与存储血缘实战指南【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本文基于 DataHub 官方文档 Hive Pre-Sync 及其配套源码展开完整讲解hive采集器如何通过 PyHive/Thrift 从 Hive 抽取数据库、表与列元数据覆盖最小权限授予、六种典型认证配置BASIC/LDAP/Kerberos/TLS/HDInsight/Databricks及可选的存储血缘storage lineage能力并深入源码印证各配置项在HiveSource中的实际解析行为帮助你在生产环境中稳定配置并运行 Hive 元数据采集任务。一、Hive 采集器概述与提取内容hive模块是 DataHub 中面向 Hive 元数据的生产级采集入口通过 PyHive 连接库与 HiveServer2 建立 Thrift 连接默认 10000 端口TLS 下为 10001 端口拉取整个 Hive 集群的元数据并转换为 DataHub 工作单元。该插件提取的内容与源码 hive_source.py 中HiveSource类文档字符串一致数据库、schema 与表的元数据每张表关联的列类型详细的表与存储信息表属性、位置等表、行与列级统计信息通过可选的 SQL profiling 获得相关文档Hive 源配置示例Hive Metastore 连接器直连 metastore 的替代方案底层连接库为 PyHive安装acryl-datahub[hive]时自动引入二、前置条件Prerequisites网络访问能够访问 HiveServer2 的 10000 端口TLS 场景为 10001 端口用户账号一个对目标数据库和表具备读权限的 Hive 用户依赖安装安装 PyHive 连接依赖pip install acryl-datahub[hive]2.1 最小权限要求仅元数据DataHub 使用的 Hive 账号至少需要以下权限官方文档建议只授予只读权限-- 授予要采集的所有数据库的 SELECT 权限 GRANT SELECT ON DATABASE database_name TO USER datahub_user; -- 授予表/视图的 SELECT 权限用于 schema 抽取 GRANT SELECT ON TABLE database_name.* TO USER datahub_user;2.2 启用存储血缘时的额外权限若计划启用存储血缘emit_storage_lineage连接器还需要读取表的 location 信息-- 授予 SELECT 以读取存储位置 GRANT SELECT ON database_name.* TO USER datahub_user;2.3 权限建议只读访问DataHub 只需要读权限切勿授予INSERT、UPDATE、DELETE或DROP按库过滤如果只需要采集特定数据库用database配置参数限定范围从而减少所需权限。从源码可以印证这一按库过滤行为get_schema_names 方法中若配置了self.config.database采集会被直接限制到该数据库否则回退到父类TwoTierSQLAlchemySource的全库枚举逻辑。三、认证方式与配置示例Hive 连接器通过 PyHive 支持多种认证方式统一通过 recipe 参数配置。以下各示例均继承自官方文档与 hive_recipe.yml。3.1 基础认证用户名/密码最简单的认证方式直接使用用户名和密码source: type: hive config: host_port: hive.company.com:10000 username: datahub_user password: ${HIVE_PASSWORD} # 敏感信息使用环境变量完整的本地 recipe 示例摘自 hive_recipe.ymlsource: type: hive config: # 连接坐标 host_port: localhost:10000 database: DemoDatabase # 可选不指定则采集所有数据库 # 凭据 username: user # 可选 password: pass # 可选 # 更多认证细节LDAP、Kerberos 等通过 options.connect_args 传递 #options: # connect_args: # auth: KERBEROS # kerberos_service_name: hive #scheme: hivehttp # Thrift 使用 HTTP 传输时设置 #scheme: hivehttps # Thrift 使用带 SSL 的 HTTP 传输时设置 #scheme: sparksql # Spark Thrift Server 时设置 # 存储血缘配置可选 #emit_storage_lineage: false #hive_storage_lineage_direction: upstream # upstreamstorage - Hive或 downstreamHive - storage #include_column_lineage: true #storage_platform_instance: prod-s3 sink: # sink 配置3.2 LDAP 认证source: type: hive config: host_port: hive.company.com:10000 username: datahub_user password: ${LDAP_PASSWORD} options: connect_args: auth: LDAP3.3 Kerberos 认证适用于 Kerberos 保护的 Hive 集群source: type: hive config: host_port: hive.company.com:10000 options: connect_args: auth: KERBEROS kerberos_service_name: hive运行环境要求有效的 Kerberos 票据运行采集前先用kinit换取Kerberos 配置文件/etc/krb5.conf或通过KRB5_CONFIG环境变量指定已安装 PyKerberos 或 requests-kerberos 包。3.4 TLS/SSL 安全连接source: type: hive config: host_port: hive.company.com:10001 scheme: hivehttps username: datahub_user password: ${HIVE_PASSWORD} options: connect_args: auth: BASIC3.5 Azure HDInsight 集群source: type: hive config: host_port: cluster_name.azurehdinsight.net:443 scheme: hivehttps username: admin password: ${HDINSIGHT_PASSWORD} options: connect_args: http_path: /hive2 auth: BASIC3.6 Databricks经 PyHivesource: type: hive config: host_port: workspace-url:443 scheme: databrickspyhive username: token # 或 Databricks 用户名 password: ${DATABRICKS_TOKEN} # 个人访问令牌或密码 options: connect_args: http_path: sql/protocolv1/o/xxxyyyzzzaaasa/1234-567890-hello123注意如需更完整的 Databricks 支持官方建议改用专门的 Databricks Unity Catalog 连接器它提供更强的功能hive连接器对 Databricks 的支持是经由 PyHive 的轻量路径。四、源码级实现剖析4.1 配置模型HiveConfig与 scheme 默认值连接器实现位于 hive_source.py其中配置类HiveConfig第 144-154 行继承自TwoTierSQLAlchemyConfig关键实现细节scheme 默认值scheme: str hive对应文档中hivehttp、hivehttps、sparksql、databrickspyhive等可选取值host_port 自动清洗clean_host_port字段校验器会调用config_clean.remove_protocol去除用户误写的协议前缀如http://hive:10000会被规范化为hive:10000这解释了 recipe 中host_port只写主机:端口而无需协议的写法能力声明HiveSource标注为SupportStatus.GA声明了PLATFORM_INSTANCE默认启用、DOMAINS经domain字段等能力LINEAGE_COARSE/LINEAGE_FINE能力则分别由include_view_lineage/include_view_column_lineage视图血缘默认开启与emit_storage_lineage/include_column_lineage存储血缘驱动。4.2 视图识别与视图定义提取PyHive 的 SQLAlchemy 方言在get_table_names中会把视图当作表返回因此HiveSource对视图做了专门处理源码第 115-141 行、第 304-355 行方言方法被替换为执行SHOW VIEWS [IN db]与SHOW CREATE TABLE并对多行返回的视图 DDL 做拼接还原_process_view为视图产出viewPropertiesaspectviewLanguage: SQL与SubTypes: VIEW当include_view_lineage开启时视图定义被送入 SQL 血缘聚合器抽取视图到上游表的列级血缘。4.3 复杂类型展开struct / map / array / uniontypeHive 的复杂类型在 DataHub 中会被展开为嵌套的 schema 字段树。get_schema_fields_for_column 通过正则^(struct|map|array|uniontype)匹配复杂类型再借助 hive_schema_to_avro 将 Hive 列类型转换为 Avro schema最终转为 DataHub 的 MCE schema 字段保留nullable、description与isPartOfKey分区键信息。此外源码第 63-112 行对databricks_dbapi的DatabricksPyhiveDialect.get_columns做了补丁透传full_type如decimal(10,1)的完整类型串并过滤# Partition Information/# Partitioning头这正是 3.6 节 Databricks 场景下列类型能完整保留的实现依据。4.4 表属性与分区键get_table_properties 会清洗 HiveDESCRIBE FORMATTED输出中尾部带冒号的属性键名并透出表的locationget_partitions 通过inspector.get_indexes提取分区列这些列随后在 schema 中标记为isPartOfKey。五、存储血缘Storage Lineage配置与源码印证hive连接器独有的能力之一是为 Hive 表与其底层存储位置S3、Azure Blob、GCS、HDFS 等之间生成血缘边。全部配置项定义在 storage_lineage.py 的HiveStorageLineageConfigMixin中配置项默认值说明emit_storage_lineagefalse是否生成存储 ↔ Hive 表血缘启用后为每张表与其 location 解析出的存储平台数据集之间建立血缘hive_storage_lineage_directionupstream血缘方向upstream表示存储是 Hive 的上游数据从存储流向 Hivedownstream表示 Hive 是存储的上游include_column_lineagetrue与emit_storage_lineage同时启用时抽取表列与存储位置字段之间的列级血缘storage_platform_instancenull生成存储数据集 URN 时使用的 platform instance如prod-s3触发机制HiveSource.get_workunits_internalhive_source.py 第 203-246 行在父类产出每个工作单元后从datasetProperties.customProperties[Location]读取表位置构造StorageDescriptor并交给HiveStorageLineage.get_lineage_mcp生成血缘 MCP解析失败仅上报 warning 而不中断采集。存储位置可识别的平台包括 S3、Azure、GCS、本地file与hdfs见 storage_lineage.py 的平台名映射。这也解释了第二节中启用存储血缘需额外读取 location 权限的原因。六、与 hive-metastore 连接器的选择建议官方文档将 hive-metastore 连接器 列为hive的替代方案二者定位差异可概括为hive本文经 HiveServer2 的 Thrift 通道认证方式与真实用户会话一致BASIC/LDAP/Kerberos/TLS支持视图定义、复杂类型展开与存储血缘适合有标准 HS2 端点的生产环境hive-metastore直连 Hive Metastore 服务适合不便开放 HS2、或需要更高吞吐直读 metastore 的场景。可按环境约束二选一若目标实为 Databricks则优先考虑 Unity Catalog 连接器。七、总结与快速核对清单配置一个可用的 Hive 采集任务前建议按以下清单核对全部依据本文引用的文档与源码pip install acryl-datahub[hive]是否完成网络是否可达 HS2 的 10000/10001 端口采集账号是否为只读GRANT SELECT并按需配置database缩小范围与权限认证方式options.connect_args.auth取BASIC/LDAP/KERBEROSTLS 场景将scheme设为hivehttpsSpark Thrift Server 设为sparksql需要视图血缘时确认include_view_lineage默认开启需要存储↔表血缘时开启emit_storage_lineage并按需设置方向与storage_platform_instance运行datahub ingest后通过采集报告中的 warning如Failed to generate storage lineage定位单表级别的血缘抽取问题。主要参考路径文档 hive_pre.md、配置示例 hive_recipe.yml、实现 hive_source.py、存储血缘 storage_lineage.py。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价