技术11期:Atlas的概念你了解多少?

 

导读

在当今大数据的应用越来越广泛的情况下,数据治理一直是企业面临的巨大问题,大部分只是单纯的对数据进行了处理,而数据的血缘、分类等等却很难实现,市场上也急需要一个专注于数据治理的技术框架,这时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

想了解更多关于人工智能的资讯

欢迎关注公众号:普适极客

猜你喜欢

转载自blog.csdn.net/PUSHIAI/article/details/107162588