针对元数据管理系统,各类开源方案在业界层出不穷,本文将列举和对比几个业内比较流行的元数据管理组件:
Apache Atlas为Hadoop大数据生态体系提供基本的元数据治理功能,主要的特性包括:数据分类:业务元数据标签、定义、注释;元数据搜索及血缘;集中操作审计;安全与策略引擎。系统组成模块架构如下:
Atlas支持多类型的元数据接入,具有良好的可扩展性,目前支持数据源:HBase、Hive、Sqoop、Storm、Kafka。在Atlas中定义了类型系统(Type System),用于元模型管理,而每个entity即是对应的元数据记录,Data是具体元数据下的主数据信息,关系如下所示:
Atlas支持基于json文件定义类型,内置模型定义的源码路径:atlas/addons/models,json定义类型对应AtlasTypesDef(Atlas启动时会注册这些元模型类型),AtlasTypesDef中定义的基础元模型AtlasEntityDef继承关系如下:
以AtlasEntityDef中类型名称为hive_tables为例的类型定义如下:
Name: hive_table
TypeCategory: Entity
SuperTypes: DataSet
Attributes:
name: string
db: hive_db
owner: string
createTime: date
lastAccessTime: date
comment: string
retention: int
sd: hive_storagedesc
partitionKeys: array<hive_column>
aliases: array<string>
columns: array<hive_column>
parameters: map<string>
viewOriginalText: string
viewExpandedText: string
tableType: string
temporary: boolean
AtlasBaseTypeDef 抽象类是基本的元模型Type定义属性,用于拼装元模型定义(即AtlasTypesDef)。
AtlasType 是Atlas类型定义的抽象类,最常用的是AtlasEntityType 定义实体(Entity)元模型类型。
而具体的Entity元模型定义对象由AtlasEntity类定义,继承通用的Atlas结构化数据的定义类AtlasStruct,其中
Atlas基于消息中间件(Kafka)发送消息来实现元数据变更(新增/更新/删除)通知,发送的消息定义为ATLAS_ENTITIES,关注元数据变更的系统可监听该消息Topic变更实现功能自定义。
Atlas V1.0版本及之后使用Notifications V2,元数据以下变更操作会触发元数据消息发送:
ENTITY_CREATE: sent when an entity instance is created
ENTITY_UPDATE: sent when an entity instance is updated
ENTITY_DELETE: sent when an entity instance is deleted
CLASSIFICATION_ADD: sent when classifications are added to an entity instance
CLASSIFICATION_UPDATE: sent when classifications of an entity instance are updated
CLASSIFICATION_DELETE: sent when classifications are removed from an entity instance
消息的格式如下所示:包括元数据对象,操作类型,元数据分类操作;
AtlasEntity entity;
OperationType operationType;
List<AtlasClassification> classifications;
元数据操作类型OperationType包括:ENTITY_CREATE, ENTITY_UPDATE, ENTITY_DELETE,CLASSIFICATION_ADD, CLASSIFICATION_DELETE, CLASSIFICATION_UPDATE, RELATIONSHIP_CREATE, RELATIONSHIP_UPDATE, RELATIONSHIP_DELETE。
NotificationHookConsumer定义了元数据变更的消息消费,启动Thread线程消费Kafka消息并逐条处理消息持久化,元数据新增的大致流程如下:
NotificationInterface 消息通知接口:定义Atlas中根据通知类型(NotificationType)的通用消息生产和消费,NotificationType包括:Hook和ENTITIES,可根据JSON数据进行执行类型的反序列化(MessageDeserializer),最终JSON定义的消息反序列化为HookNotification和EntityNotification对象。
基于LineageREST类提供实体对象血缘关系查询REST API接口,基于接口AtlasLineageService#getAtlasLineageInfo 实现元数据查看操作,
以Hive血缘生产为例,血缘信息的AtlasEntityDef都会继承Process(可参考前述),基于CreateHiveProcess#getNotificationMessages封装Hive产生的血缘信息并最终发送到消息中间件,基于Hive原生的HookContext中获取血缘信息,支持血缘解析的Hive SQL类型:
Atlas中关联数据采用图存储,目前是Janusgraph实现。Atlas的所有数据最终都会转换成图存储中的顶点vertex、边edge和属性property三种元素。
Linkedin DataHub是开源的元数据管理平台,由之前Linkedin WhereHows项目重构改造,项目主要分为三大模块:
其中Modeling:定义通用性的元模型:实体、关系、属性。
元数据集成(Ingestion)是灵活的服务架构,支持:PUSH、PULL、异步/同步数据模型(底层基于Python实现):
其中,MCE中的元数据变更来源的分类主要有:hook(引擎Hook),lineage(SQL血缘)、operators(任务DAG过程);基于airflow框架实现。
DataHub Serving,也称为Serving Tier(分层服务),主要提供元数据的持久化和查询检索能力,即提供元数据管理能力。最核心的是提供gms服务并对外部暴露元数据CRUD操作接口。
Serving Tier:提供不同等级的查询支持,包括:KV文本存储,基于ES索引检索,基于图数据库关系查询。
LinkedIn DataHub中没有实现SQL血缘解析,是基于Airflow实现的作业血缘,可参考lineage-backend,基于airflow.lineage#prepare_lineage 解析血缘信息。
Netflix Metacat 是 Netflix 研发的统一的元数据探索服务。通过分离计算引擎与具体的数据源,解决在 Netflix 大规模和多样化的数据生态系统中,不同数据存储系统之间的元数据互操作性问题。提供统一的REST/Thrift 接口来访问各种数据存储的元数据。通过直连数据源管理,实时联邦视图。
整体架构设计:
Lyft Amundsen 是由 Lyft 开源的数据发现和元数据引擎项目,用于解决数据探索
实现过程中的问题与挑战:
PayPal内部使用的一个数据目录系统,用于统一管理和组织公司内部的数据目录。主要包括三个模块:
AWS Glue 是亚马逊提供的一种完全托管的ETL(Extract, Transform, Load)服务,能够自动发现AWS上存储的数据,并将其存储在AWS Glue Data Catalog中,这是一个中央元数据存储库,可以作为数据湖和数据仓库的基础。AWS Glue 核心功能包括两部分:
AWS Glue 数据目录提供持久性元数据存储,它是一项全托管服务,可在AWS 云中存储、注释和共享元数据,就像在 Apache Hive 元存储中一样。
数据目录支持多租户:每个AWS账户在每个AWS区域有一个 AWS Glue 数据目录 它提供了一个统一的存储库,不同的系统可以在其中存储和查找元数据来跟踪数据孤岛中的数据,并使用该元数据来查询和转换数据。
AWS Lake Formation 是亚马逊提供的数据湖托管服务,目标是让用户能够轻松地设置一个数据湖,并提供必要的安全性和权限管理,以便用户可以安全地存储、分类和搜索他们的数据。
AWS Lake Formation提供的元数据管理功能:
广泛意义的数据挖掘,主要包括两个部分:Indexing、serving。基于数据治理的数据进行模型训练和数据挖掘。
元数据建设架构自底向上包括:
数据治理体系如图所示:自底向上主要包括数据基础服务、数据治理模型、数据治理应用等 3 层
数据治理基础服务:
数据治理模型:数据生产链路进行自动化治理,将数据治理与资源管理相结合
基于业界方案调研,可以总结出以下规律:
腾讯云数据湖的统一元数据架构:支持在线数据目录和离线数据治理的统一,除了完善的离线数据治理能力外,也为计算引擎提供在线数据目录功能。
下表展示了各个开源系统与腾讯云数据治理功能的对比,其中腾讯数据治理服务主要依托于WeData对外提供,对比可以看出腾讯云数据治理具备丰富且完整的离线治理能力。
按照以往经验,除了系统的功能完整性外,开源的数据治理系统在实际业务中是很难直接使用起来的。因为数据治理是与业务领域和形态密切相关,而开源项目为保证通用性,会尽可能与具体业务解耦。因此,直接使用具有一定抽象性且通用的开源系统,只能获取比较基础的数据治理能力,很难得到业务相关的数据价值。若与业务结合,则需要对开源系统进行深度的二次开发,因此我们在数据治理模块选择了完全自研。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。