Apache Atlas数据治理和元数据框架

一、概述

  • Atlas 是一个可伸缩和可扩展的核心基础治理服务集合 ,使企业能够有效地和高效地满足 Hadoop 中的合规性要求,并允许与整个企业数据生态系统的集成。

  • Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据科学家,数据分析师和数据治理团队提供围绕这些数据资产的协作功能。

二、特点

1.元数据类型 & 实例(Metadata types & instances)

  • 各种Hadoop和非Hadoop元数据的预定义类型
  • 能够为要管理的元数据定义新类型
  • 类型可以具有原始属性,复杂属性,对象引用;可以继承其他类型
  • 类型(type)实例(称为实体entities)捕获元数据对象详细信息及其关系
  • 可以更轻松地进行集成用于处理类型和实例的REST API

2.分类(Classification)

  • 能够动态创建分类 - 如PII,EXPIRES_ON,DATA_QUALITY,SENSITIVE。
  • 分类可以包含属性 - 例如EXPIRES_ON分类中的expiry_date属性。
  • 实体(entities)可以与多个分类(classifications)相关联,从而实现更轻松的发现和安全实施。
  • 通过血缘传播分类 - 自动确保分类在进行各种处理时遵循数据。

3. 血缘(Lineage)

  • 直观的UI,用于在数据流转时,通过各种流程时查看数据。
  • 用于访问和更新血缘的REST API。

4.搜索/发现(Search/Discovery)

  • 直观的UI,按类型(type),分类(classification),属性值(attribute)或自由文本搜索实体
  • 丰富的REST API,可按复杂条件进行搜索。
  • SQL搜索实体的查询语言 - 域特定语言(DSL)。

5.安全和数据屏蔽

  • 用于元数据访问的细粒度安全性,实现对实体实例的访问控制以及添加/更新/删除分类等操作。
  • 与Apache Ranger集成可根据与Apache Atlas中的实体相关的分类对数据访问进行授权/数据屏蔽。

三、高级架构

1.Atlas的架构

在这里插入图片描述

2.核心层(Core)

Atlas核心包含以下组件:

  • 类型系统(Type System): Atlas允许用户为他们想要管理的元数据对象定义模型。该模型由称为“类型”的定义组成。称为“实体”的“类型”实例表示受管理的实际元数据对象。 Type System是一个允许用户定义和管理类型和实体的组件。开箱即用的Atlas管理的所有元数据对象(例如Hive表)都使用类型建模并表示为实体。要在Atlas中存储新类型的元数据,需要了解类型系统组件的概念。

  • 图形引擎(Graph Engine:): Atlas在内部使用Graph模型持久保存它管理的元数据对象(之前版本使用的是TITIAN)。这种方法提供了很大的灵活性,可以有效地处理元数据对象之间的丰富关系。图形引擎组件负责在Atlas类型系统的类型和实体之间进行转换,以及底层图形持久性模型。除了管理图形对象之外,图形引擎还为元数据对象创建适当的索引,以便可以有效地搜索它们。 Atlas使用JanusGraph存储元数据对象

    目前,Atlas 使用 JanusGraph 图数据库来存储元数据对象。 JanusGraph 使用两个存储:默认情况下元数据存储配置为 HBase ,索引存储配置为 Solr。元数据存储用于存储元数据对象本身,并且索引存储用于存储元数据属性的索引,其允许高效搜索。
    在Atlas中查询某一个元数据对象时往往需要遍历图数据库中的多个顶点与边,相比关系型数据库直接查询一行数据要复杂的多,当然使用图数据库作为底层存储也存在它的优势,比如可以支持复杂的数据类型和更好的支持血缘数据的读写。

  • 采集/导出(Ingest / Export):采集组件允许将元数据添加到Atlas。同样,“导出”组件将Atlas检测到的元数据更改公开为事件。消费者可以使用这些更改事件来实时响应元数据的变更。

3.集成层(Integration)

  • 在Atlas中,用户可以使用以下的两种方式管理元数据:

  • API: Atlas的所有功能都通过REST API向最终用户暴露,该API允许创建,更新和删除类型和实体。它也是查询和发现Atlas管理的类型和实体的主要机制。

  • Messaging: 除了API之外,用户还可以选择使用基于Kafka的消息传递接口与Atlas集成。这对于将元数据对象传递到Atlas以及使用Atlas使用可以构建应用程序的元数据更改事件都很有用。如果希望使用与Atlas更松散耦合的集成来实现更好的可伸缩性,可靠性等,则消息传递接口特别有用。Atlas使用Apache Kafka作为通知服务器,用于钩子和元数据通知事件的下游消费者之间的通信。事件由钩子和Atlas写入不同的Kafka主题

4.元数据源层(Metadata sources)

  • **Atlas支持开箱即用的多种元数据源集成。**未来还将增加更多集成。目前,Atlas支持从以下来源提取和管理元数据:
    • HBase
    • Hive
    • Sqoop
    • Storm
    • Kafka
  • 集成意味着两件事:Atlas定义的元数据模型用于表示这些组件的对象。 Atlas提供了从这些组件中摄取元数据对象的组件(在某些情况下实时或以批处理模式)。

5.应用层(Applications)

  • Atlas管理的元数据被各种应用程序使用,以满足许多治理需求。

  • Atlas Admin UI: 该组件是一个基于Web的应用程序,允许数据管理员和科学家发现和注释元数据。这里最重要的是搜索界面和类似SQL的查询语言,可用于查询Atlas管理的元数据类型和对象。 Admin UI使用Atlas的REST API来构建其功能。

  • Tag Based Policies:Apache Ranger是Hadoop生态系统的高级安全管理解决方案,可与各种Hadoop组件进行广泛集成。通过与Atlas集成,Ranger允许安全管理员定义元数据驱动的安全策略以实现有效的治理。 Ranger是Atlas通知的元数据更改事件的使用者。

6.存储层

  • Metadata Store<Hbase>: Atlas使用Hbase存储元数据。
  • IndexStore<Solr>:采用Solr来建索引

四、类型系统

  • Atlas允许用户为他们想要管理的元数据对象定义模型。该模型由称为type(类型)的定义组成。称为**entities(实体)type(类型)**实例表示受管理的实际元数据对象。

  • Type表示定义元数据对象属性的一个或一组属性类型就相当于面向对象编程语言的“Class”定义或关系数据库的“table schema”。Atlas中的类型(Type)由name唯一标识。例如hive表的Type:Name: hive_table

  • Atlas中的entity是type的特定值或实例,因此表示现实世界中的特定元数据对象。用我们对面向对象编程语言的类比,实例(instance)是某个类(Class)的对象(Object)。

  • 参考https://atlas.apache.org/1.1.0/TypeSystem.html

五、搜索

六、Hook

1.Hive Hook

Atlas获取Hive元数据主要有两步:

  • 在Hive中设置Atlas Hook

    Atlas Hive hook向Hive注册以监听创建/更新/删除操作,并通过Kafka实时通知更新Atlas中的元数据,以感知Hive中的更改

    //Set-up Atlas hook in hive-site.xml by adding the following:
    <property>
        <name>hive.exec.post.hooks</name>
          <value>org.apache.atlas.hive.hook.HiveHook</value>
      </property>
    
  • 导入Hive元数据

    Apache Atlas提供了一个命令行脚本import-hive.sh,用于将Apache Hive数据库和表的元数据导入Apache Atlas。该脚本可用于使用Apache Hive中的数据库/表初始化Apache Atlas。此脚本支持导入特定表的元数据,特定数据库中的表或所有数据库和表。

  • 其他类型Hook配置参考:https://atlas.apache.org/1.1.0/index.html

七、获取元数据的原理

Atlas获取Hive元数据的原理:

  • 首先执行import-hive.sh,这里相当于初始化作用,Altas获取Hive的库/表结构(注意!此时并没有获获表与表/字段之间的血缘关系,只是获取了表的结构,即 create table语句,此时可以在web ui上面只会看到单个表的名字,location等等信息)
  • 要想正真获取血缘关系,必须配置hive.exec.post.hooks,然后需要把任务重新调度一下,即执行 insert overwrite a select * from b(注意!a表中一定要有新的数据落地)。此时配置的hook 会监听感知到hive表中有更新操作,然后通过Kafka将更新的数据发给Atlas,Atlas会对数据修改,这样在Web Ui 就会看到 a表与b表的血缘关系。
  • Atlas的缺点:
    在实际使用中,发现Atlas存在的一些缺点
    • 1.两个表之间必须要有真实的数据落地,才能解析出来表的血缘关系。例如:查询一条在a表中不存在的数据,然后插入b表。这样就无法解析ab表的血缘关系。
    • 2.如果sql中用到的表,使用 with as...当做临时表。这样Atlas也无法解析血缘关系。

八、部署安装

九、参考资料

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页