导读
在当今大数据的应用越来越广泛的情况下,数据治理一直是企业面临的巨大问题,大部分只是单纯的对数据进行了处理,而数据的血缘、分类等等却很难实现,市场上也急需要一个专注于数据治理的技术框架,这时Atlas应运而生。
▐ Atlas的定义:
Apache Atlas是Hadoop社区为解决Hadoop生态系统的元数据治理问题而产生的开源项目,它为Hadoop集群提供了包括数据分类、集中策略引擎、数据血缘、安全和生命周期管理在内的元数据治理核心功能。
Atlas支持各种Hadoop和非Hadoop元数据类型,提供了丰富的Rest Api进行集成,对数据血缘的追溯达到了字段级别,对权限也有很好的控制。
▐ Atlas的架构原理:
❑ 核心组件:
(1)Core
Ingest/Export(采集导出组件):Ingest组件允许将元数据添加到Atlas;Export组件暴露由Atlas检测到的元数据更改,以作为事件引发,消费者可以使用这些更改事件来实时响应元数据更改。
Type System(类型系统):Atlas允许用户为他们想要管理的元数据对象定义一个模型。类型系统是一个组件,允许用户定义和管理类型和实体。由Atlas管理的所有元数据对象(如Hive表)都使用类型进行建模,并表示为实体。
Graph Engine(图形引擎):Atlas在内部通过图形引擎来管理元数据对象,以实现元数据之间的巨大灵活性和丰富的关系。Graph Engine是负责在Type System中的类型和实体之间进行转换的组件,以及基础图形模型。除了管理图形对象之外,图形引擎还为元数据对象创建适当的索引,以便有效进行搜索。
JanusGraph(图数据库):用来存储元数据对象。默认情况下,元数据存储配置为HBase,索引存储配置为Solr。
(2)Integration
API:Atlas的所有功能都可以通过Rest Api提供给最终用户,允许创建、更新和删除类型和实体。它也是查询和发现通过Atlas管理的类型和实体的主要方法。
Messaging:除了API之外,还可以选择使用基于Kafka的消息接口与Atlas集成。这对于将元数据对象传输到Atlas以及Atlas使用可以构建应用程序的元数据更改事件都非常有用。
(3)Metadata Source
Atlas支持与许多元数据源的集成,目前支持以下数据源获取和管理元数据:hive、sqoop、storm、falcon。
(4)Applications
Atlas Admin UI:是一个基于Web的应用程序,提供了搜索界面和类Sql的查询语言,可以用来查询由Atlas管理元数据类型和对象。Admin UI使用Atlas的Rest API来构建其功能。
Tag Based Policies::Apache Ranger 是针对 Hadoop 生态系统的高级安全管理解决方案,与各种 Hadoop 组件具有广泛的集成。通过与 Atlas 集成,Ranger 允许安全管理员定义元数据驱动的安全策略,以实现有效的治理。Ranger 是由 Atlas 通知的元数据更改事件的消费者。
Business Taxonomy:从元数据源获取到 Atlas 的元数据对象主要是一种技术形式的元数据。为了增强可发现性和治理能力,Atlas 提供了一个业务分类界面,允许用户首先定义一组代表其业务域的业务术语,并将其与 Atlas 管理的元数据实体相关联。业务分类法是一种 Web 应用程序,目前是 Atlas Admin UI 的一部分,并且使用 REST API 与 Atlas 集成。
▐ Atlas API
主要是对Type、Entity、Attribute这3个构件的增删改查操作,里面封装了很多配置,留下API和Admin UI供外部使用。
Type:Atlas中的“类型”是一个定义,说明如何存储并访问特定类型的元数据对象。类型表示一个特征或一个特征集合,这些属性定义了元数据对象。具有开发背景的用户将识别类型的相似性,以面向对象编程语言的“Class”定义或关系的“table schema”数据库。
Entity:Atlas中的一个“实体”是类“Type”的特定值或实例,因此表示特定的元数据对象。回指我们的面向对象的类比编程语言,“instance”是某个“Class”的“Object”。
Attribute:属性定义在复合metatypes中,如Class和Struct。可以简单将属性称为具有名称和metatype值。
► 例子1:使用Type定义一个Hive table,并具有相关的attribute
Name: hive_table
MetaType: Class
SuperTypes: DataSet
Attributes:
name: String (name of the table)
db: Database object of type hive_db
owner: String
createTime: Date
lastAccessTime: Date
comment: String
retention: int
sd: Storage Description object of type hive_storagedesc
partitionKeys: Array of objects of type hive_column
aliases: Array of strings
columns: Array of objects of type hive_column
parameters: Map of String keys to String values
viewOriginalText: String
viewExpandedText: String
tableType: String
temporary: Boolean
► 例子2:一个Entity的定义
id: "9ba387ddfa76429cb791ffc338d3c91f"
typeName: “hive_table”
values:
name: “customers”
db: "b42c6cfcc1e742fda9e6890e0adf33bc"
owner: “admin”
createTime: "20160620T06:
13:28.000Z"
lastAccessTime: "20160620T06:
13:28.000Z"
comment: null
retention: 0
sd: "ff58025f685441959f753a3058dd8dcf"
partitionKeys: null
aliases: null
columns: ["65e2204f6a234130934a9679af6a211f",
"d726de70faca46fb9c99cf04f6b579a6",
...]
parameters: {"transient_lastDdlTime": "1466403208"}
viewOriginalText: null
viewExpandedText: null
tableType: “MANAGED_TABLE”
temporary: false
► 例子3:
(1)获取所有的types
GET http://atlasserverhost:port/api/atlas/types
GET http://atlasserverhost:port/api/atlas/types?type=STRUCT|CLASS|TRAIT
(2)获取某一个type
GET http://atlasserverhost:port/api/atlas/types / {type_name}
(3)创建新type
POST http://atlasserverhost:port/api/atlas/type
(4)创建新entity
http://atlasserverhost:port/api/atlas/entities (entities:是一个数组)
(5)获取一个entity
GET http://atlasserverhost:port/api/atlas/ entities /{guid} (guid是entity的id)
(6)获取一个包含某个attribute(属性)的entity
GET http://atlasserverhost:port/api/atlas/entities?type={type_name}&p roperty={unique_attribute_name}&value={unique_attribute_value
(7)更新entity的一个attribute属性
POST http://atlasserverhost:port/api/atlas/entities/{GUID}
❑ 血缘关系
Json中每两个Table(entity)之间需要一个Process进行连接,形成一条血缘关系图,首末两端使用inputs,outputs进行entity关联。
{
"entity":{
"typeName":"Process",
"attributes":{
"qualifiedName":"table_03@[email protected]",
"createdBy":"caozqaAPI",
"createTime":"2017-08-25T13:15:25.369Z",
"updatedBy":"caozqaAPI",
"updateTime":"2017-08-25T14:12:45.246Z",
"name":"table_01",
"comment":"rdbms_table API insert test",
"description":"rdbms_table 手动输入",
"owner":"caozqa",
"type":"table",
"contact_info":"table_03_info",
"inputs":[{
"guid": "eddcde3c-92a2-4cfc-86d1-6ea43f6497b0",
"typeName": "rdbms_table"
}],
"outputs":[{
"guid": "f438d921-ff4c-4838-bdca-3b868bbed825",
"typeName": "rdbms_table"
}]
}
}
}
代码中可以找到一个Process类,该类继承自Asset类型,所以自带有name,owner,description,quailifiedName四种属性,它自己特有的inputs和outputs表示该过程的输入输出,它是Atlas血缘管理中所有类型的超类,在概念上,它可以用于表示任何数据变换操作。
例如,将原始数据的 hive 表转换为存储某个聚合的另一个 hive 表的 ETL 过程可以是扩展过程类型的特定类型。流程类型有两个特定的属性,输入和输出。输入和输出都是 DataSet 实体的数组。
因此,Process 类型的实例可以使用这些输入和输出来捕获 DataSet 的 lineage 如何演变,例如hive_process,sqoop_process 类型,在rdbms中直接使用Process 来存储血缘关系。
► 查询API的方式,采用base验证,get请求:
http://ip:port/api/atlas/v2/lineage/58182d3b-0777-4297-aae8-949368ef7bc5
总结:这一篇文章中介绍了Atlas相关的基础知识及架构原理,我们可以了解到Atlas的Rest API使用以及数据血缘相关的治理。
参考资料:
https://www.jianshu.com/p/4eee91bc926c
https://www.lagou.com/lgeduarticle/72927.htm
想了解更多关于人工智能的资讯
欢迎关注公众号:普适极客