Apache Atlas为Hadoop提供了数据治理功能。Apache Atlas用作公共元数据存储,旨在在Hadoop堆栈内外交换元数据。Atlas与Apache Ranger的紧密集成使您能够在Hadoop堆栈的所有组件之间一致地定义、管理和治理安全性和合规性策略。Atlas向Data Steward Studio提供元数据和血缘、以支持跨企业数据整理数据。
1. 什么是Apache Atlas?
Atlas是一个元数据管理和治理系统,旨在帮助您查找、组织和管理数据资产。Atlas在数据湖中创建对象和操作的“实体”或元数据表示。您可以将业务元数据添加到这些实体,以便您可以使用业务词汇表来更轻松地搜索特定资产。
1.1.Apache Atlas使用元数据创建血缘关系
Atlas读取收集的元数据的内容,以建立数据资产之间的关系。当Atlas接收查询信息时,它将记录查询的输入和输出,并生成血缘,该血缘可跟踪数据的使用方式和随时间变化的方式。数据转换的这种可视化使治理团队可以快速识别数据源,并了解数据和架构更改的影响。
1.2. 添加到实体元数据使搜索更加容易
Atlas管理您创建并用于增强数据资产元数据的分类和标签。您可以创建和组织分类和标签,以用于从标识数据清理阶段到记录用户评论和对特定数据资产的见解的任何事情。使用分类时,“ Atlas仪表板”使搜索、分组、报告和进一步注释您标记的实体变得容易。分类本身可以组织为层次结构,以使其更易于管理。
Atlas还提供了用于创建和维护业务本体以标记数据资产的基础架构。Atlas的“词汇表”包括“术语”,因此您可以为部门或组织范围内的词汇表建立商定的清单,以识别和管理数据。添加术语可以使您单击该术语所标识的实体的报告。
1.3. Apache Atlas体系结构
Atlas在Hadoop环境中作为独立服务运行。许多Hadoop数据处理和存储服务都包含Atlas附加组件,这些附加组件将服务活动的元数据发布到Kafka消息主题。Atlas读取消息并将其存储在JanusGraph中以对实体之间的关系建模。JanusGraph背后的数据存储区是HBase。Atlas将搜索索引存储在Solr中,以利用Solr的搜索功能。
存在针对Hive、Impala、Kafka、NiFi、Spark和Sqoop的预定义挂钩。
Atlas还提供了“桥接”,可为给定源中的所有现有数据资产导入元数据。例如,如果在Hive中创建数据库和表之后启动Atlas,则可以使用Hive桥接导入现有数据资产的元数据。桥接使用Atlas API导入元数据,而不是将消息发布到Kafka。
如果您需要挂钩或桥接来自动从另一个来源收集元数据,请使用Atlas Java API创建自定义的Atlas插件。
1.3.1. 使用Apache Atlas进行数据管理
收集、创建和使用元数据的概念。
当您通过使用组织的业务词汇表来扩充生成的“技术”元数据时,Atlas元数据用于组织和查找数据的价值就会增加。这是您要执行的操作:
- 工具。您可以使用标签、分类、属性和术语表将元数据添加到实体。该词汇表使您可以识别同义词,从而使来自不同团队的词汇不会干扰识别相同数据的方式。
- 规划。找出谁以及如何使用这些工具:针对要应用的元数据类型制定总体计划,针对如何应用以及谁可以应用它们设计一些约定。设计一些过程以监督元数据的收集,以确保结果一致和有用;识别同义词和反义词。
- 例子。本文档包括组织元数据的方法示例;描述如何针对特定用例进行优化的策略。
1.4. Atlas仪表盘之旅
快速介绍Atlas用户界面和术语。
Atlas用户界面是一个包含两个部分的元数据仪表板:
- 左侧的搜索面板。
- 右侧的“详细信息”面板将在其中显示搜索结果,并在您深入特定实体时显示该实体的详细信息。每个详细信息页面都有一个标题部分和一系列选项卡式面板,所有这些面板都针对该实体类型的元数据。
1.4.1. 搜索
搜索面板上有三个用于搜索的选项卡:常规“搜索”选项卡和基于“分类”和“词汇表”术语的预定义搜索。在常规“搜索”选项卡中,从现有的元数据类型列表中进行选择以缩小搜索结果的范围。切换到高级搜索,您可以输入特定的搜索查询;基本搜索和高级搜索均可保存,以方便重复使用。
在分类选项卡中,选择一个分类将显示所有用该分类标记的实体。使用搜索框查找特定的分类、或浏览创建分类时定义的分类层次。
在词汇表选项卡中,选择一个术语将显示所有用该术语标记的实体。使用搜索框查找特定术语,或按词汇表浏览术语。您还可以使用类别视图找到特定的术语:浏览组织业务词汇表的层次结构;选择类别时,显示窗格会显示分配给该类别的术语。选择这些术语之一时,Atlas将显示与该术语关联的实体。
当您运行搜索并且Atlas返回结果时,您会看到符合搜索条件的实体的页面列表。从这里,您可以返回搜索选项,进一步优化搜索或使用控件来更改搜索结果的显示方式。
1.4.2. 查看实体详细信息
当您单击搜索结果中实体的链接时,Atlas将打开一个实体详细信息页面,其中包含为该实体收集的元数据。详细信息页面在选项卡中组织实体内容:
- 资产:“属性”选项卡包括为此实体收集的系统元数据以及添加的所有用户定义的属性。它还包含应用于实体的标签列表。您可以使用任何“字符串”数据类型属性中的值来使用自由文本搜索来找到此实体。
- 血缘: Atlas UI为每个实体显示一个血缘图。该图将显示在实体详细信息页面的“血缘”选项卡中。对于数据资产实体,血缘图显示了该实体是操作的输入还是输出。对于流程实体,血缘图显示了该操作使用的或生产的所有输入和输出实体。
- 关系:该选项卡将与该实体关联的其他实体列为“关系”。您可以将相关实体的列表显示为列表或图形。使用此选项卡可在实体之间导航。特殊关系类型“输入”和“输出”包括组成谱系的实体。
- 分类:分类选项卡显示与此实体关联的分类(也在详细信息页面的顶部显示)。它允许您从实体中添加,更新或删除分类。请注意,要管理分类,您需要被授予执行分类操作的特权。
- 审核:图集记录了实体元数据发生的更改。更改列在实体详细信息页面的“审核”选项卡中。审核显示Atlas更新实体的元数据的时间,包括以下更改:
- 添加或删除分类
- 实体属性已更新
- 添加,更新或删除标签
- 添加,更新或删除关系
- 词汇表术语已添加或删除
- Schema:当当前实体是表时,将显示“Schema”选项卡并列出表中的列。使用此选项卡可深入查看特定列或向列添加分类(无需打开该列的详细信息页面即可添加分类)。
在群集服务中执行的操作会在Atlas中创建元数据。
Atlas为许多Hadoop集群服务提供了附加组件,以在该服务执行某些操作时收集元数据。Atlas插件或“挂钩”会收集一组预定义的信息,并将其发送到Atlas服务器。Atlas服务器通读元数据并创建实体,以表示由元数据描述的数据集和过程。Atlas可以为它处理的每个事件创建一个或多个实体。例如,当用户在HBase中创建名称空间时,Atlas将创建一个实体来表示新的HBase名称空间。当用户在HiveServer中运行查询时,Atlas可能会创建许多实体,包括描述查询本身的实体,查询所涉及的任何表,查询所涉及的每个表的每个列的实体,等等。
下表列出了默认情况下与Atlas集成的服务。对于每个服务,该表列出了Atlas确认的服务所产生的事件以及Atlas响应每个事件而产生的实体。请注意,事件与实体之间并不总是一对一的关系:从单个事件产生的实体取决于事件本身。
资源 | 确认的动作 | 创建/更新的实体 |
---|---|---|
HiveServer | ALTER DATABASE CREATE DATABASEDROP DATABASE | hive_db,hive_db_ddl |
ALTER TABLE CREATE TABLE CREATE TABLE as SELECT DROP TABLE | hive_process,hive_process_execution,hive_table,hive_table_ddl,hive_column,hive_column_lineage,hive_storagedesc,hdfs_path | |
ALTER VIEW ALTERVIEW_AS_SELECT CREATE VIEW CREATE VIEW AS SELECT DROP VIEW | hive_process,hive_process_execution,hive_table,hive_column,hive_column_lineage,hive_table_ddl | |
INSERT INTO (SELECT) INSERT OVERWRITE | hive_process,hive_process_execution | |
HBase | alter_async | hbase_namespace,hbase_table,hbase_column_family |
create_namespace alter_namespace drop_namespace | hbase_namespace | |
create table alter table drop table drop_all tables | hbase_table,hbase_column_family | |
alter table (create column family) alter table (alter column family) alter table (delete column family) | hbase_table,hbase_column_family | |
Impala* | CREATETABLE_AS_SELECT | impala_process,impala_process_execution,impala_column_lineage,hive_db hive_table_ddl |
CREATEVIEW | impala_process,impala_process_execution,impala_column_lineage,hive_table_ddl | |
ALTERVIEW_AS_SELECT | impala_process,impala_process_execution,impala_column_lineage,hive_table_ddl | |
INSERT INTO INSERT OVERWRITE | impala_process, impala_process_execution | |
Spark* | CREATE TABLE USING CREATE TABLE AS SELECT, CREATE TABLE USING ... AS SELECT | spark_process |
CREATE VIEW AS SELECT, | spark_process | |
INSERT INTO (SELECT), LOAD DATA [LOCAL] INPATH | spark_process |
*对于这些来源,Atlas从HMS收集相应的资产元数据。Atlas协调从每个来源的Kafka消息接收的实体元数据。
2 Atlas元数据模型概述
Atlas的模型表示集群数据资产和操作,并且足够灵活,可以让您表示其他来源的对象。
灵活的Atlas元数据模型使您可以表示对象及其之间的关系,从而可以生成数据湖图。使用Atlas,您可以创建预定义实体类型的新实例,并可以定义实体的新类型,以便可以表示来自其他数据源甚至不位于Hadoop中的服务的数据资产和操作。Atlas的组成部分是实体、关系、分类、枚举和结构。
实体是建模或表示数据资产或数据操作的属性的集合。实体是Atlas在搜索结果中返回或在谱系图中显示为节点的单位。您可以使用Atlas API更改模型以将属性添加到实体定义。标签被建模为给定实体实例上的属性;您可以将用户定义的属性添加到各个实体实例(不影响实体类型定义)。
关系描述了两个实体之间的联系。您可以使用自定义属性创建关系定义,以表示特定于流程的行为。对关系定义的更改需要通过Atlas API更改模型。
分类是可以与实体相关联的一组命名键/值对。分类与实体属性不同:
- 分类不是实体元数据的一部分,因此它们是一种在不更新实体类型定义的情况下将元数据添加到实体的方法。
- 可以将分类添加到任何实体类型。
- Atlas可以通过血缘关系传播分类。
- 可以在Ranger中使用分类来驱动访问策略。
Atlas还支持定义自定义枚举和数据结构,类似于结构化编程语言中的那些构造。枚举可用于属性定义中以存储预定值的列表。可以在属性定义中使用struct来识别更复杂的数据类型。
3. 使用标签控制数据访问
Ranger策略可以使用标签来识别数据。Atlas分类被作为标签拉入Ranger。
您可以使用Atlas分类来通过Ranger驱动数据访问控制。Ranger提供基于资源和基于标签的访问控制策略。使用元数据标签而不是特定的资源名称可为您提供灵活性,并允许访问控制立即应用于新数据资产,而无需管理员干预。
您可以使用Atlas分类来控制用户对数据资产的访问,方法是使用Atlas分类来定义基于Ranger标签的访问控制策略。基于Ranger标签的策略可确保Hive和Impala之类的服务控制对特定数据资产的用户和组访问。Ranger策略可以使服务将掩码应用于列数据,因此用户可以看到部分数据或匿名数据之类的结果。为此,您可以在Atlas中定义分类。将分类与数据资产相关联,包括数据库、表、视图和列;然后定义对使用Atlas分类标记的数据资产起作用的策略。
可以使用分类的一些方法包括:
- 将属性添加到Atlas分类中,以为单独的上下文定义单独的行为。例如,您可以将列标记为“国家ID”,然后根据该信息应用策略。您可以在“国民ID”分类中添加一个属性,该属性描述要应用于国民ID显示的规则,例如“从...申请规则”:“ EU”或“从...申请规则”:“ JPN”)。Ranger策略可以使用属性值将不同的掩码模式应用于数据。
- Atlas血缘可以将分类从一列传播到后来根据相同数据创建的列。传播分类时,基于这些分类构建的Ranger策略将应用于数据的新位置。无需干预即可确保将原始数据的访问控制应用于新副本。
- 如果将Ranger设置为拒绝对所有者以外的新数据的访问,则可以使用标签显示此数据(仅访问分类数据)。
3.1 何时使用Atlas分类进行访问控制
基于资源和基于标签的策略以不同的方式有用。
Ranger提供基于资源的策略和基于标签的策略。下表提供了一些示例,说明了何时选择一种策略而不是另一种:
基于资源的策略 | 基于标签的策略 |
---|---|
控制对每种服务类型的数据资产的访问(每种数据资产有多个策略) | 控制对所有服务类型的数据资产的访问 |
控制对整个数据库的访问 | 控制对源表中列的访问,用户可以将其复制或转换为其他表 |
控制对长期存在的表的访问 | 通过设置有效日期来控制对数据的访问,直到对其进行审核/分类 |
控制对特定表中知名列的访问,这些列不会随时间变化 |
3.2. 基于标签的访问控制如何工作
在Atlas中做一些准备工作,以使标签可用于创建Ranger策略。
请按照以下步骤在您的环境中设置基于标记的访问控制:
1. 确定要控制的数据,控制的对象以及控制方式。
如果您知道数据特征,但没有可靠的数据列名称,或者想向某些用户显示部分数据,请为该列分配分类,并在Ranger中设置基于标签的策略以应用掩码数据。
- 跨多个服务的相同资源。在Ranger中设置基于标签的策略。请注意,基于资源的策略适用于单个服务。
- 整个数据库。在Ranger中设置基于资源的策略。
- 表。在Ranger中设置基于资源的策略。
- 列。在Atlas中标记列,然后在Ranger中创建基于标记的策略,即使将其转换为其他表,也可以控制对该数据的访问。
2. 在Atlas中创建分类,以描述何时应控制数据的触发器。
3. 将分类分配给Atlas数据资产。
4. 在Ranger中创建“基于标签的策略”。
5. 使用Hue或Zeppelin验证策略是否按预期工作。
3.3 使用分类控制数据访问的示例
您可以使用分类来控制对数据的访问的某些方式。
使用分类来控制数据:
- 有效期或有效期。
- 敏感数据屏蔽
- 按部门或地区划分访问权限
4. 扩展Atlas以管理其他来源的元数据
您可以在Atlas中创建实体类型以表示数据资产,操作或来自默认来源以外的其他来源的其他类型的工件。
Atlas的数据模型设计得足够灵活,可以表示各种各样的数据资产及其生成过程。您可以设计自己的实体,以从Atlas中预定义的来源以外的来源收集元数据。创建实体的高级过程如下:
原文:https://docs.cloudera.com/runtime/7.0.3/concepts-governance.html