Apache Atlas

个人公众号
大数据理论及实战

Apache Atlas

介绍

Apache Atlas (/ˈætləs/ ) 是一个深度集成Hadoop平台各个组件的数据治理和元数据管理框架。它提供了一个可伸缩和可扩展的核心基础数据治理服务集,使得企业可以有效的和高效的满足Hadoop中的合规性要求,并允许与整个企业的数据生态系统集成,它为Hadoop集群提供了包括 数据分类、集中策略引擎、数据血缘、安全和生命周期管理在内的元数据治理核心能力。

特征

元数据类型和实例

  • 可以为Hadoop 生态圈各的组件和其他组件的元数据预定义类型
  • 可以为要管理的元数据定义新类型
  • 类型可以有原始属性、复杂属性、对象引用,也可以从其他类型继承
  • 类型(称为实体)的实例捕获元数据对象细节及其关系
  • 用于处理类型和实例的REST api允许更容易的集成

安全审计

  • 数据访问的日志审计

搜索和血缘关系

  • 元数据信息及数据之间的血缘

安全与策略引擎

  • 结合Apache Ranger来设置数据的访问权限

架构概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFArAX8R-1625140514290)(http://atlas.apache.org/public/images/twiki/architecture.png)]

主要由一下组件组成

Atlas Core
  • Type System: Atlas允许用户为他们想要管理的元数据对象定义一个模型,该模型由 Type 组成,被管理的实际元数据对象是该 Type 的实体。Type System 是一个允许用户定义和管理Type和实体的组件。由 Atlas 管理的所有元数据对象(例如Hive表)都使用Type进行建模,并表示为实体。需要注意的一个关键点是,Atlas建模的一般性质允许数据管理员和集成人员定义技术元数据和业务元数据。也可以使用Atlas的特性来定义两者之间丰富的关系。

  • Graph Engine: Atlas 内部使用图形模型持久保存它管理的元数据对象,以实现元数据对象之间的巨大灵活性和丰富的关系。Graph Engine 是负责在 Type System 中的Type 和实体之间进行转换的组件,以及底层图的持久性模型。除了管理图数据对象之外,图数据引擎还为元数据对象创建适当的索引,以便有效地搜索它们。Atlas使用JanusGraph(图数据库)来存储元数据对象。

Ingest / Export:Ingest组件允许将元数据添加到Atlas中,Export组件将Atlas检测到变化的元数据作为事件提出,消费者可以使用这些更改的事件来实时响应元数据更改。

Integration

用户可以使用两种方法管理Atlas中的元数据:

  • API:Atlas的所有功能都通过一个REST API向最终用户公开,该API允许创建、更新和删除类型和实体。它也是查询和发现Atlas管理的类型和实体的主要机制。
  • Messaging: 除了 API 之外,用户还可以选择使用基于 Kafka 的消息接口与 Atlas 集成。这对于将元数据对象传输到 Atlas 以及从 Atlas 使用可以构建应用程序的元数据更改事件都非常有用。如果希望使用与 Atlas 更松散耦合的集成,这可以允许更好的可扩展性,可靠性等,消息传递接口是特别有用的。Atlas 使用 Apache Kafka 作为通知服务器用于hooks(React 16.8 的新增特性。这里就简单理解为前端页面) 和元数据通知事件的下游消费者之间的通信。事件由hooks 和 Atlas 写到不同的 Kafka 主题。
Metadata sources

Atlas支持与许多开箱即用的元数据源集成。将来还会添加更多的集成。目前,Atlas支持从以下来源摄取和管理元数据:

Applications

Atlas管理的元数据由各种应用程序使用,以满足许多治理用例。

  • Atlas Admin UI: 该组件是一个基于web的应用程序,允许数据管理员和科学家发现和注释元数据。这里最重要的是一个搜索接口和类似SQL的查询语言,可以用来查询Atlas管理的元数据类型和对象。管理UI使用Atlas的REST API来构建其功能。
  • Tag Based Policies: Apache Ranger是Hadoop生态系统的高级安全管理解决方案,与各种Hadoop组件广泛集成。通过与Atlas集成,Ranger允许安全管理员为有效的治理定义元数据驱动的安全策略。Ranger是Atlas通知的元数据更改事件的使用者。

Type System

Types

Atlas中的Type 是用来存储和访问特定类型的元数据对象,类型表示定义元数据对象属性的一个或一组属性。

一个类型案例如下:

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

从上面的例子可以看出以下几点:

  • Atlas 中的 类型是由“名称”唯一标识
  • 类型有一个元类型。Atlas有以下元类型:
    1. Primitive metatypes: boolean, byte, short, int, long, float, double, biginteger, bigdecimal, string, date
    2. Enum metatypes
    3. Collection metatypes: array, map
    4. Composite metatypes: Entity, Struct, Classification, Relationship
  • Entity & Classification 可以从其他类型“扩展”,称为“超类型”,因此,它将拥有超类型中定义的属性,所以建模者可以定义一组相关类型的公共属性等。这又类似于面向对象语言如何为类定义超类的概念。Atlas中的类型也可以从多个超类型扩展。
    • 在本例中,每个hive表都从一个预定义的超类型DataSet扩展而来。
  • 具有EntityStructClassificationRelationship 的metatype的类型可以具有属性集合,每个属性都有一个名称(例如“name”)和一些其他相关属性,可以使用表达式type_name.attribute_name引用属性
  • 属性中的类型引用(如hive_table.db)是特别有趣的,我们可以定义Atlas中定义的两种类型之间的任意关系,从而构建丰富的模型。注意,还可以将引用列表收集为属性类型(例如hive_table)。表示从hive_table到hive_column类型的引用列表的列)。

Entities

Atlas中的“实体”是实体“类型”的特定值或实例,因此表示特定元数据对象,回顾我们对面向对象编程语言的类比,“实例”是某个“类”的“对象”。

以一个hive表的entity 为列:

guid:     "9ba387dd-fa76-429c-b791-ffc338d3c91f"
typeName: "hive_table"
status:   "ACTIVE"
values:
    name:             “customers”
    db:               { "guid": "b42c6cfc-c1e7-42fd-a9e6-890e0adf33bc",
                        "typeName": "hive_db"
                      }
    owner:            “admin”
    createTime:       1490761686029
    updateTime:       1516298102877
    comment:          null
    retention:        0
    sd:               { "guid": "ff58025f-6854-4195-9f75-3a3058dd8dcf",
                        "typeName":
                        "hive_storagedesc"
                      }
    partitionKeys:    null
    aliases:          null
    columns:          [ { "guid": "65e2204f-6a23-4130-934a-9679af6a211f",
                          "typeName": "hive_column" },
                        { "guid": "d726de70-faca-46fb-9c99-cf04f6b579a6",
                          "typeName": "hive_column" },
                          ...
                      ]
    parameters:       { "transient_lastDdlTime": "1466403208"}
    viewOriginalText: null
    viewExpandedText: null
    tableType:        “MANAGED_TABLE”
    temporary:        false

从上面的例子可以看出以下几点:

  • 实体类型的每个实例都由唯一标识符(GUID)标识。这个GUID是在定义对象时由Atlas服务器生成的,并且在实体的整个生命周期内保持不变。在任何时候,都可以使用GUID访问这个特定的实体。
  • 实体具有给定的类型,类型的名称由实体定义提供。如上列的表为 ‘hive_table‘。
  • 这个实体的值是在hive_table类型定义中定义的所有属性名称及其属性值的映射。
  • 属性值将根据属性的数据类型确定。实体类型属性的值为AtlasObjectId类型。

With this idea on entities, we can now see the difference between Entity and Struct metatypes. Entities and Structs both compose attributes of other types. However, instances of Entity types have an identity (with a GUID value) and can be referenced from other entities (like a hive_db entity is referenced from a hive_table entity). Instances of Struct types do not have an identity of their own. The value of a Struct type is a collection of attributes that are ‘embedded’ inside the entity itself.

Attributes

我们已经看到属性是在诸如Entity, Struct, Classification and Relationship 等metatypes 中定义的,但 Atlas中的属性有更多的属性,这些属性定义了更多与type system相关的概念。

Attribute具有以下属性:

name:        string,
typeName:    string,
isOptional:  boolean,
isIndexable: boolean,
isUnique:    boolean,
cardinality: enum

上述属性有以下含义:

  • name - 属性的名称

  • dataTypeName - 属性的metatype 名称(native, collection or composite)

  • isComposite -

    • This flag indicates an aspect of modelling. If an attribute is defined as composite, it means that it cannot have a lifecycle independent of the entity it is contained in. A good example of this concept is the set of columns that make a part of a hive table. Since the columns do not have meaning outside of the hive table, they are defined as composite attributes.
    • A composite attribute must be created in Atlas along with the entity it is contained in. i.e. A hive column must be created along with the hive table.
  • isIndexable -此标志指示是否应该对该属性建立索引,以便可以使用属性值作为谓词执行查找,并且可以高效地执行查找。

  • isUnique -

    • 此标志同样与索引相关。如果指定为惟一的,则意味着在JanusGraph中为该属性创建一个特殊的索引,该索引允许基于等式的查询。
    • 任何具有此标志的值为true 的属性都被视为主键,以便将此实体与其他实体区分开来。因此,应该注意确保该属性在现实世界中确实是惟一的属性。
      • 例如,考虑hive_table的name属性。单独来说,名称不是hive_table的惟一属性,因为具有相同名称的表可以存在于多个数据库中。如果Atlas在多个集群中存储hive表的元数据,即使是一对(数据库名、表名)也不是唯一的。在物理世界中,只有集群位置、数据库名和表名是惟一的。
  • multiplicity -

    表明此属性是必需的、可选的,还是可以是多值的,如果一个实体的属性值定义与类型定义中的多重性声明不匹配,那么这将违反约束,并且实体添加将失败,因此,可以使用此字段定义元数据信息上的一些约束。

    使用上面的方法,让我们扩展下面hive表的一个属性的属性定义,让我们看看属性叫’ db ',它代表的是hive表所属的数据库:

    db:
        "name":        "db",
        "typeName":    "hive_db",
        "isOptional":  false,
        "isIndexable": true,
        "isUnique":    false,
        "cardinality": "SINGLE"
    

​ 注意 :isOptional=true表示——没有数据库引用就不能创建表实体。

columns:
    "name":        "columns",
    "typeName":    "array<hive_column>",
    "isOptional":  optional,
    "isIndexable": true,
    “isUnique":    false,
    "constraints": [ { "type": "ownedRef" } ]

注意 : 列的 ownedRef约束。通过这样做,我们指示所定义的列实体应该始终绑定到与其一起定义的表实体。

系统的具体类型及其意义

Referenceable

此类型表示可以使用名为qualifiedName的惟一属性搜索的所有实体。

Asset

该类型扩展了可引用的,并添加了名称、描述和所有者等属性。Name是必选属性(isOptional=false),其他属性是可选属性。

Infrastructure

这种类型扩展了Asset,通常可以用作基础结构元数据对象(如集群、主机等)的通用超类型.

DataSet

这种类型扩展了 Referenceable,从概念上讲,它可以用来表示存储数据的类型。在Atlas中,hive表、hbase_tables等都是来自DataSet的扩展类型。

Process

这种类型扩展Asset,从概念上讲,它可以用来表示任何数据转换操作。Process type 有两个特定的属性,输入和输出。输入和输出都是数据集实体的数组,因此,Process type 的实例可以使用这些输入和输出来捕获数据集的沿袭如何演变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值