建设物流网站,深圳乐安居网站谁做的,怎么自己制作图片,无限资源免费视频有哪些下载数据治理之元数据管理的利器——Atlas
一、数据治理与元数据管理
1.1 背景
为什么要做数据治理#xff1f; 业务繁多#xff0c;数据繁多#xff0c;业务数据不断迭代。人员流动#xff0c;文档不全#xff0c;逻辑不清楚#xff0c;对于数据很难直观理解#xff0c;…数据治理之元数据管理的利器——Atlas
一、数据治理与元数据管理
1.1 背景
为什么要做数据治理 业务繁多数据繁多业务数据不断迭代。人员流动文档不全逻辑不清楚对于数据很难直观理解后期很难维护。
在大数据研发中原始数据就有着非常多的数据库数据表。
而经过数据的聚合以后又会有很多的维度表。
近几年来数据的量级在疯狂的增长由此带来了系列的问题。作为对人工智能团队的数据支撑我们听到的最多的质疑是 “正确的数据集”他们需要正确的数据用于他们的分析。我们开始意识到虽然我们构建了高度可扩展的数据存储实时计算等等能力但是我们的团队仍然在浪费时间寻找合适的数据集来进行分析。
也就是我们缺乏对数据资产的管理。事实上有很多公司都提供了开源的解决方案来解决上述问题这也就是数据发现与元数据管理工具。
1.2 元数据管理
什么是元数据
举几个例子
如果一本书是一个“数据那么它的书名、封面、出版社、作者、总页码就是它的“元数据”。如果数据库中某个表是一个”数据”那么它的列名、列类型、列长度、表注释就是它的元数据。
元数据用来描述数据的数据通过描述数据的产生、存储、使用情况、业务含义等信息以及数据管理人员相关信息。让人们能够清楚拥有什么数据、代表什么、源自何处、如何在系统中移动以及哪些人可以使用源数据如何使用。
简单地说元数据管理是为了对数据资产进行有效的组织。它使用元数据来帮助管理他们的数据。它还可以帮助数据专业人员收集、组织、访问和丰富元数据以支持数据治理。
三十年前数据资产可能是 Oracle 数据库中的一张表。然而在现代企业中我们拥有一系列令人眼花缭乱的不同类型的数据资产。可能是关系数据库或 NoSQL 存储中的表、实时流数据、 AI 系统中的功能、指标平台中的指标数据可视化工具中的仪表板。
现代元数据管理应包含所有这些类型的数据资产并使数据工作者能够更高效地使用这些资产完成工作。
所以元数据管理应具备的功能如下
**搜索和发现**数据表、字段、标签、使用信息**访问控制**访问控制组、用户、策略**数据血缘**管道执行、查询**合规性**数据隐私/合规性注释类型的分类**数据管理**数据源配置、摄取配置、保留配置、数据清除策略**AI 可解释性、再现性**特征定义、模型定义、训练运行执行、问题陈述**数据操作**管道执行、处理的数据分区、数据统计**数据质量**数据质量规则定义、规则执行结果、数据统计
1.3 架构与开源方案
下面介绍元数据管理的架构实现不同的架构都对应了不同的开源实现。
下图描述了第一代元数据架构。它通常是一个经典的单体前端可能是一个 Flask 应用程序连接到主要存储进行查询通常是 MySQL/Postgres一个用于提供搜索查询的搜索索引通常是 Elasticsearch并且对于这种架构的第 1.5 代也许一旦达到关系数据库的“递归查询”限制就使用了处理谱系通常是 Neo4j图形查询的图形索引。 很快第二代的架构出现了。单体应用程序已拆分为位于元数据存储数据库前面的服务。该服务提供了一个 API允许使用推送机制将元数据写入系统。 第三代架构是基于事件的元数据管理架构客户可以根据他们的需要以不同的方式与元数据数据库交互。
元数据的低延迟查找、对元数据属性进行全文和排名搜索的能力、对元数据关系的图形查询以及全扫描和分析能力。 Apache Atlas 就是采用的这种架构并且与Hadoop 生态系统紧密耦合。下图是当今元数据格局的简单直观表示包含部分非开源方案 二、Apache Atlas简介
2.1 简介
在当今大数据的应用越来越广泛的情况下数据治理一直是企业面临的巨大问题。
大部分公司只是单纯的对数据进行了处理而数据的血缘分类等等却很难实现市场上也急需要一个专注于数据治理的技术框架这时Atlas应运而生。
Atlas官网地址https://atlas.apache.org/Atlas是Hadoop的数据治理和元数据框架。 文档查看地址https://atlas.apache.org/2.1.0/index.html 下载地址https://www.apache.org/dyn/closer.cgi/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz Atlas是一组可扩展和可扩展的核心基础治理服务使企业能够有效高效地满足Hadoop中的合规性要求并允许与整个企业数据生态系统集成。
Apache Atlas为组织提供了开放的元数据管理和治理功能以建立其数据资产的目录对这些资产进行分类和治理并为数据科学家分析师和数据治理团队提供围绕这些数据资产的协作功能。
如果想要对这些数据做好管理光用文字、文档等东西是不够的必须用图。Atlas就是把元数据变成图的工具。 2.2 特性
Atlas支持各种Hadoop和非Hadoop元数据类型提供了丰富的REST API进行集成对数据血缘的追溯达到了字段级别这种技术还没有其实类似框架可以实现对权限也有很好的控制
Atlas包括以下组件
采用Hbase存储元数据采用Solr实现索引Ingest/Export 采集导出组件 Type System类型系统 Graph Engine图形引擎 共同构成Atlas的核心机制所有功能通过API向用户提供也可以通过Kafka消息系统进行集成Atlas支持各种源获取元数据HiveSqoopStorm。。。还有优秀的UI支持
Apache Atlas为Hadoop的元数据治理提供了以下特性
数据分类 为元数据导入或定义业务导向的分类注释 定义注释以及自动捕获数据集和底层元素之间的关系 导出元数据到第三方系统
集中审计 捕获与所有应用过程以及与数据交互的安全访问信息 捕获执行步骤活动等操作的信息
搜索与血缘 预定义的导航路径用来探索数据分类以及审计信息 基于文本的搜索特性来快速和准确的定位相关联的数据和审计事件 对数据集血缘关系的可视化浏览使用户可以下钻到操作安全以及数据起源相关的信息
安全与策略引擎 基于数据分类模式属性以及角色的运行时合理合规策略 基于分类-预测的高级策略定义以防止数据推导 基于cell的属性和值的行/列级别的masking
2.3 Atlas的主要功能
元数据管理和治理提升团队间对于数据资产的协作功能
具体功能详细介绍元数据分类支持对元数据进行分类管理例如个人信息敏感信息等元数据检索可按照元数据类型、元数据分类进行检索支持全文检索元数据血缘支持表到表和字段到字段之间的血缘依赖便于进行问题回溯和影响分析等
2.4 整体流程
元数据处理的整体流程入下图所示 在Atlas中查询某一个元数据对象时往往需要遍历图数据库中的多个顶点与边相比关系型数据库直接查询一行数据要复杂的多当然使用图数据库作为底层存储也存在它的优势比如可以支持复杂的数据类型和更好的支持血缘数据的读写。
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将更新的数据发给AtlasAtlas会对数据修改这样在Web Ui 就会看到 a表与b表的血缘关系。 Atlas的缺点 在实际使用中发现Atlas存在的一些缺点 1.两个表之间必须要有真实的数据落地才能解析出来表的血缘关系。例如查询一条在a表中不存在的数据然后插入b表。这样就无法解析ab表的血缘关系。2.如果sql中用到的表使用 with as...当做临时表。这样Atlas也无法解析血缘关系。
2.5 类型系统
Atlas 允许用户为他们想要管理的元数据对象定义一个模型。该模型由称为 “类型” (type)的定义组成。被称为 “实体” (entities)的 “类型” 实例表示被管理的实际元数据对象。由 Atlas 管理的所有元数据对象例如Hive表都使用类型进行建模并表示为实体。 TypeAtlas中的 “类型” 定义了如何存储和访问特定类型的元数据对象。类型表示了所定义元数据对象的一个或多个属性集合。具有开发背景的用户可以将 “类型” 理解成面向对象的编程语言的 “类” 定义的或关系数据库的 “表模式”。类型具有元类型元类型表示 Atlas 中此模型的类型 基本元类型 IntStringBoolean等 集合元类型例如ArrayMap ClassStructTrait EntitiesAtlas中的 “实体” 是类 “类型” 的特定值或实例因此表示真实世界中的特定元数据对象。回顾我们的面向对象编程语言的类比“实例” 是某个 “类” 的 “对象”。 AttributesAtlas中的属性还有一些属性其定义了与类型系统相关的更多概念包括 isComposite - 是否复合 isIndexable - 是否索引 isUnique - 是否唯一 multiplicity - 指示此属性是必需的可选的还是可以是多值的
Atlas 提供了一些预定义的系统类型 Referenceable此类型表示可使用名为 qualifiedName 的唯一属性搜索的所有实体 Asset此类型包含名称说明和所有者等属性 Infrastructure此类型扩展了Referenceable和Asset 通常可用于基础设施元数据对象如群集主机等的常用超类型 DataSet此类型扩展了Referenceable和Asset 。在概念上它可以用于表示存储数据的类型。在 Atlas 中hive表Sqoop RDBMS表等都是从 DataSet 扩展的类型。扩展 DataSet 的类型可以期望具有模式它们将具有定义该数据集的属性的属性。例如 hive_table 中的 columns 属性。另外扩展 DataSet 的实体类型的实体参与数据转换这种转换可以由 Atlas 通过 lineage或 provenance生成图形。 Process此类型扩展了Referenceable和Asset 。在概念上它可以用于表示任何数据变换操作。例如将原始数据的 hive 表转换为存储某个聚合的另一个 hive 表的 ETL 过程可以是扩展过程类型的特定类型。流程类型有两个特定的属性输入和输出。
Hive表是Atlas本机定义的一种类型的示例定义Hive表具有以下属性
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: arrayhive_column aliases: arraystring columns: arrayhive_column parameters: mapstring viewOriginalText: string viewExpandedText: string tableType: string temporary: boolean2.6 效果图 三、整体架构
3.1 架构图
Atlas架构图如下 3.2 Core层
Atlas核心包含以下组件
类型(Type)系统: Atlas允许用户为他们想要管理的元数据对象定义模型。该模型由称为“类型”的定义组成。称为“实体”的“类型”实例表示受管理的实际元数据对象。 Type System是一个允许用户定义和管理类型和实体的组件。开箱即用的Atlas管理的所有元数据对象例如Hive表都使用类型建模并表示为实体。要在Atlas中存储新类型的元数据需要了解类型系统组件的概念。
需要注意的一个关键点是Atlas中建模的一般特性允许数据管理员和集成商定义技术元数据和业务元数据。也可以使用Atlas的功能定义两者之间的丰富关系。
图形引擎: Atlas在内部使用Graph模型持久保存它管理的元数据对象。这种方法提供了很大的灵活性可以有效地处理元数据对象之间的丰富关系。图形引擎组件负责在Atlas类型系统的类型和实体之间进行转换以及底层图形持久性模型。除了管理图形对象之外图形引擎还为元数据对象创建适当的索引以便可以有效地搜索它们。 Atlas使用JanusGraph存储元数据对象。
采集/导出采集组件允许将元数据添加到Atlas。同样“导出”组件将Atlas检测到的元数据更改公开为事件。消费者可以使用这些更改事件来实时响应元数据的变更。
3.3 Integration层
在Atlas中用户可以使用以下的两种方式管理元数据
API: Atlas的所有功能都通过REST API向最终用户暴露该API允许创建更新和删除类型和实体。它也是查询和发现Atlas管理的类型和实体的主要机制。
Messaging: 除了API之外用户还可以选择使用基于Kafka的消息传递接口与Atlas集成。这对于将元数据对象传递到Atlas以及使用Atlas使用可以构建应用程序的元数据更改事件都很有用。如果希望使用与Atlas更松散耦合的集成来实现更好的可伸缩性可靠性等则消息传递接口特别有用.Atlas使用Apache Kafka作为通知服务器用于钩子和元数据通知事件的下游消费者之间的通信。事件由钩子和Atlas写入不同的Kafka主题。
3.4 Metadata sources层
Atlas支持开箱即用的多种元数据源集成。未来还将增加更多集成。目前Atlas支持从以下来源提取和管理元数据
Hive通过hive bridge atlas可以接入Hive的元数据包括hive_db/hive_table/hive_column/hive_processSqoop通过sqoop bridgeatlas可以接入关系型数据库的元数据包括sqoop_operation_type/ sqoop_dbstore_usage/sqoop_process/sqoop_dbdatastoreFalcon通过falcon bridgeatlas可以接入Falcon的元数据包括falcon_cluster/falcon_feed/falcon_feed_creation/falcon_feed_replication/ falcon_processStorm通过storm bridgeatlas可以接入流式处理的元数据包括storm_topology/storm_spout/storm_boltHBase: 通过hbase bridge
Atlas集成大数据组件的元数据源需要实现以下两点 首先需要基于atlas的类型系统定义能够表达大数据组件元数据对象的元数据模型(例如Hive的元数据模型实现在org.apache.atlas.hive.model.HiveDataModelGenerator) 然后需要提供hook组件去从大数据组件的元数据源中提取元数据对象实时侦听元数据的变更并反馈给atlas
集成意味着两件事Atlas定义的元数据模型用于表示这些组件的对象。 Atlas提供了从这些组件中摄取元数据对象的组件在某些情况下实时或以批处理模式。
3.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通知的元数据更改事件的使用者。
Business Taxonomy从元数据源获取到 Atlas 的元数据对象主要是一种技术形式的元数据。为了增强可发现性和治理能力Atlas 提供了一个业务分类界面允许用户首先定义一组代表其业务域的业务术语并将其与 Atlas 管理的元数据实体相关联。业务分类法是一种 Web 应用程序目前是 Atlas Admin UI 的一部分并且使用 REST API 与 Atlas 集成。
四、编译、部署与安装
Atlas的安装坑较多。本教程将详细介绍Atlas2.1.0整个安装过程比较难受的是 Atlas不提供安装包下载的是源码包 需要自行编译打包。
Atlas2.1.0实战安装、配置、导入hive元数据、编译排坑
4.1 下载
请前往官网 https://atlas.apache.org/#/Downloads 下载对应版本的源码包 本文使用的是 2.1.0版本
国内站点 速度要快一些
https://mirrors.tuna.tsinghua.edu.cn/apache/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz
4.2 安装maven
注意需要先安装maven因为这是使用maven开发的java web工程。maven3.6.3版本即可
一些下载地址
http://maven.apache.org/download.cgi
https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
上传到linux的/usr/local目录
cd /usr/local解压文件
tar -zxvf apache-maven-3.6.3-bin.tar.gz配置环境变量
vi /etc/profile
export MAVEN_HOME/usr/local/apache-maven-3.6.3
export PATHMAVEN_HOME/bin:PATH 刷新环境变量
source /etc/profile检查版本
mvn -v 配置好maven的环境变量 注意国内需要配置好maven的国内镜像一般使用阿里华为清华等镜像 vi /usr/local/apache-maven-3.6.3/conf/settings.xml
mirroridalimaven/idnamealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOfcentral/mirrorOf
/mirror把这个setting.xml 拷贝到 ~/.m2/
cp settings.xml .m2/
4.3 编译Atlas
解压源码包
tar -zxvf apache-atlas-2.1.0-sources.tar.gz 1.修改atlas源码工程的pom.xml
将hbase zookeeper hive等依赖的版本修改成自己环境中一致的版本或者兼容的版本
父工程pom文件
zookeeper.version3.4.14/zookeeper.version
hbase.version2.2.3/hbase.version
solr.version7.7.2/solr.version2.执行maven编译打包
atlas可以使用内嵌的hbase-solr作为底层索引存储和搜索组件也可以使用外置的hbase和solr 如果要使用内嵌的hbase-solr则使用如下命令进行编译打包 cd apache-atlas-sources-2.1.0/ export MAVEN_OPTS“-Xms2g -Xmx2g” mvn clean -DskipTests package -Pdist,embedded-hbase-solr
不用内置就这样 mvn clean -DskipTests package -Pdist
改完路径还会非常快的 耐心等待 atlas的webui子模块中依赖了nodejs会从nodejs的中央仓库去下载相关依赖库
编译完成之后会产生打包结果所在位置是源码目录中的新出现的distro/target目录
注意这里产出的有压缩包也有解压后的包。这里面的hook包可以看到有各种平台的hook包。顾名思义这就是钩子包也就是各个大数据框架会提供各种生命周期回调函数并且将相关信息以数据方式提供出来。这些钩子就可以去监听和接收数据
如果没有错误 并看到一排success就是成功了 4.4 安装Atlas
在完成Atlas编译以后就可以进行Atlas的安装了。Atlas的安装主要是安装Atlas的Server端也就Atlas的管理页面并确保Atlas与Kafka Hbase Solr等组件的集成。
Atlas的系统架构如下在确保 底层存储与UI界面正常后之后就可以进行与Hive等组件的集成调试了。
在完成Atlas编译以后就可以进行Atlas的安装了。Atlas的安装主要是安装Atlas的Server端也就Atlas的管理页面并确保Atlas与Kafka Hbase Solr等组件的集成。
在确保 底层存储与UI界面正常后之后就可以进行与Hive等组件的集成调试了。
1、环境准备
安装之前 先要准备好
JDK1.8
Zookeeper
Kafka
Hbase
Solr
在启动Atlas时会配置这些环境变量的地址所以一定要确保以上组件正常运行。
由于在编译时可以选择内部集成所以这些Atlas是可以自带的但是JDK一定要安装好。
在安装Altas中需要Solr 预先创建好collection bin/solr create -c vertex_index -shards 3 -replicationFactor 2bin/solr create -c edge_index -shards 3 -replicationFactor 2bin/solr create -c fulltext_index -shards 3 -replicationFactor 2在solr中验证创建成功。
2、安装Atlas
到编译好的包的路径下 apache-atlas-sources-2.1.0/distro/target
将生成好的安装包 apache-atlas-2.1.0-server.tar.gz 拷贝到目标路径下。
解压
tar -zxvf apache-atlas-2.1.0-server.tar.gz3、修改配置
进入conf目录下
vi atlas-env.sh 在此指定JAVA_HOME和是否要用内嵌启动
export JAVA_HOME/opt/jdk1.8.0_191/
export MANAGE_LOCAL_HBASEtrue
export MANAGE_LOCAL_SOLRtrue 如果使用内嵌那么配置结束直接去 启动Atlas
但是大部分时候需要使用已经有的组件进行集成所以设置为false。
export JAVA_HOME/opt/jdk1.8.0_191/
export MANAGE_LOCAL_HBASEfalse
export MANAGE_LOCAL_SOLRfalse
#注意修改Hbase配置文件路径
export HBASE_CONF_DIR/opt/hbase/conf修改其他配置
vim atlas-application.properties 这里就是设置Hbase Solr等配置
#Hbase地址 就是Hbase配置的zookeeper地址
atlas.graph.storage.hostnameslave01:2181,slave02:2181,slave03:2181atlas.audit.hbase.zookeeper.quorumslave01:2181,slave02:2181,slave03:2181#solr服务器地址
atlas.graph.index.search.solr.http-urlshttp://slave01:8984/solr#kafka地址
atlas.notification.embeddedfalse
atlas.kafka.zookeeper.connectslave01:2181,slave02:2181,slave03:2181
atlas.kafka.bootstrap.serversslave01:9092,slave02:9092,slave03:9092#atlas地址
atlas.rest.addresshttp://slave01:210004.5 启动Atlas
bin/atlas_start.py启动成功后访问http://slave01:21000admin/admin登录
五、页面功能介绍
Atlas的页面功能非常的丰富可以进行元数据的管理及数据血缘的展示。
5.1 主界面 5.2 Search 基本搜索
基本搜索允许您使用实体的类型名称关联的分类/标记进行查询并且支持对实体属性以及分类/标记属性进行过滤。
可以使用 AND/OR 条件对多个属性进行基于属性的过滤。 支持的过滤运算符
LT符号, lt适用于数字、日期属性GT符号、gt适用于数字、日期属性LTE符号, lte适用于数字、日期属性GTE符号gte适用于数字、日期属性EQ符号eq、适用于数字、日期、字符串属性NEQ符号neq、!适用于数字、日期、字符串属性LIKE符号like、LIKE与字符串属性一起使用STARTS_WITH符号startsWith、STARTSWITH与字符串属性一起使用ENDS_WITH符号endsWith、ENDSWITH与字符串属性一起使用CONTAINS (symbols: contains, CONTAINS) 使用 String 属性
高级搜索
Atlas 中的高级搜索也称为基于 DSL 的搜索。
领域特定搜索 (DSL) 是一种结构简单的语言该语法模拟了关系数据库流行的结构化查询语言 (SQL)。
具体语法请参考Github上的Atlas DSL Grammer Antlr G4格式。
例要检索名称可以是 time_dim 或 customer_dim 的 Table 类型的实体
from Table where name time_dim or name customer_dim5.3 Classification
分类传播使与实体相关联的分类能够自动与该实体的其他相关实体相关联。这在处理数据集从其他数据集派生数据的场景时非常有用 。 为实体添加分类
将分类“PII”添加到“hdfs_path”实体后该分类将传播到沿袭路径中的所有受影响实体包括“员工”表、视图“us_employees”和“uk_employees” - 如下所示。 更新与实体关联的分类
与实体关联的分类的任何更新也将在分类传播到的所有实体中看到。 简单的说此功能可以监控数据到底流向了哪里。
5.4 glossary
词汇表也称术语表为业务用户提供适当的词汇表它允许术语词相互关联并分类以便在不同的上下文中理解它们。然后可以将这些术语映射到数据库、表、列等资产。这有助于抽象与存储库相关的技术术语并允许用户发现/使用他们更熟悉的词汇表中的数据。 通过单击词汇表 UI 中的术语名称可以查看术语的各种详细信息。详细信息页面下的每个选项卡提供该术语的不同详细信息。 当切换开关在类别上时面板将列出所有词汇表以及类别层次结构。这是此视图下可能的交互的列表。 如果一个术语具有分类则该实体已被分配继承相同的分类。 通过术语表的功能让数据资产与业务系统建立了联系。
六、Hive数据血缘
6.1 Hive2兼容性问题
Atlas与Hive存在兼容性问题本文基于Atlas2.1.0兼容CDH6.3.2部署。Hive版本为2.1.1.其他版本的问题不在此文档讨论。
为兼容Hive2.1.1需要修改源码重新编译。
所需修改的项目位置apache-atlas-sources-2.1.0\addons\hive-bridge
①.org/apache/atlas/hive/bridge/HiveMetaStoreBridge.java 577行
String catalogName hiveDB.getCatalogName() ! null ? hiveDB.getCatalogName().toLowerCase() : null;改为
String catalogName null;②.org/apache/atlas/hive/hook/AtlasHiveHookContext.java 81行
this.metastoreHandler (listenerEvent ! null) ? metastoreEvent.getIHMSHandler() : null;改为C:\Users\Heaton\Desktop\apache-atlas-2.1.0-sources\apache-atlas-sources-2.1.0\addons
this.metastoreHandler null;6.2 集成Hive
将 atlas-application.properties 配置文件压缩加入到 atlas-plugin-classloader-2.0.0.jar 中
#必须在此路径打包才能打到第一级目录下
cd /usr/local/src/atlas/apache-atlas-2.1.0/confzip -u /usr/local/src/atlas/apache-atlas-2.1.0/hook/hive/atlas-plugin-classloader-2.1.0.jar atlas-application.properties修改 hive-site.xml propertynamehive.exec.post.hooks/namevalueorg.apache.atlas.hive.hook.HiveHook/value
/property修改 hive-env.sh 的 Gateway 客户端环境高级配置代码段安全阀 HIVE_AUX_JARS_PATH/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive修改 HIVE_AUX_JARS_PATH 修改 hive-site.xml 的 HiveServer2 高级配置代码段安全阀 propertynamehive.exec.post.hooks/namevalueorg.apache.atlas.hive.hook.HiveHook/value
/property
propertynamehive.reloadable.aux.jars.path/namevalue/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive/value
/property修改 HiveServer2 环境高级配置代码段 HIVE_AUX_JARS_PATH/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive需要将配置好的Atlas包发往各个hive节点后重启集群。
6.3 导入Hive元数据
执行atlas脚本
./bin/import-hive.sh
#输入用户名admin输入密码admin登录Atlas查看元数据信息。
6.4 测试实时hive hook
简单执行一个hera资源统计的hive脚本
use sucx_test
;-- 昨日升级设备数
create table if not exists qs_tzl_ProductTag_result(
pid string
,category string
,category_code string
,tag_name string
,tag_value string
,other string
,update_time string
)
partitioned by (tag_id string)
STORED AS PARQUET TBLPROPERTIES(parquet.compressionSNAPPY)
;insert overwrite table qs_tzl_ProductTag_result partition(tag_id3014)
selectT1.product_id as pid,T2.category,cast(from_unixtime(unix_timestamp()) as string) as update_time
from (selectproduct_idfrom COM_PRODUCT_UPGRADE_STAT_D where p_day20200901 ) T1
left join (select categoryfrom bi_ods.ods_smart_product where dt20200901) T2
on T1.product_idT2.id
;执行后查看 qs_tzl_ProductTag_result 的表级血缘为 pid 的字段血缘为 6.5 Hive Hook
Atlas获取Hive元数据主要有两步 ①在Hive中设置Atlas Hook Atlas Hive hook向Hive注册以监听创建/更新/删除操作并通过Kafka实时通知更新Atlas中的元数据以感知Hive中的更改。 propertynamehive.exec.post.hooks/namevalueorg.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
七、Spark数据血缘
7.1 打包spark-atlas-connector
atlas 官方文档中并不支持 spark sql 的解析需要使用第三方的包。
地址 https://github.com/hortonworks-spark/spark-atlas-connector
一、git clone 后本地进行打包
mvn package -DskipTests
二、打包后在 spark-atlas-connector/spark-atlas-connector-assembly/target 目录有一个 spark-atlas-connector-assembly-${version}.jar 的 jar将该 jar 上传到服务器。
需要注意的是不要上传 spark-atlas-connector/spark-atlas-connector/target 这个目录内的 jar 缺少相关依赖包
三、将 spark-atlas-connector-assembly-${version}.jar 放到一个固定目录 比如/opt/resource
7.2 测试spark hook
首先进入spark-sql client
spark-sql --master yarn \
--jars /opt/resource/spark-atlas-connector_2.11-0.1.0-SNAPSHOT.jar \
--files /opt/resource/atlas-application.properties \
--conf spark.extraListenerscom.hortonworks.spark.atlas.SparkAtlasEventTracker \
--conf spark.sql.queryExecutionListenerscom.hortonworks.spark.atlas.SparkAtlasEventTracker \
--conf spark.sql.streaming.streamingQueryListenerscom.hortonworks.spark.atlas.SparkAtlasStreamingQueryEventTracker
执行 hera 的一个资源统计任务CREATE EXTERNAL TABLE IF NOT EXISTS sucx_hera.ads_hera_task_mem_top_10(job_id BIGINT COMMENT 任务ID,user STRING COMMENT 关注人,applicationId STRING COMMENT yarn执行的app id,memorySeconds BIGINT COMMENT 内存使用时间和,startedTime BIGINT COMMENT 开始时间,finishedTime BIGINT COMMENT 结束时间,elapsedTime BIGINT COMMENT 运行时间,vcoreSeconds BIGINT COMMENT vcore使用时间和)ROW FORMAT SERDEorg.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
WITH SERDEPROPERTIES (field.delim\t,serialization.format\t)
STORED AS INPUTFORMATorg.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
OUTPUTFORMATorg.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
LOCATIONcosn://sucx-big-data/bi//sucx_hera/ads_hera_task_mem_top_10;insert overwrite table sucx_hera.ads_hera_task_mem_top_10selectjob_id,user,applicationId,memorySeconds,startedTime,finishedTime,elapsedTime,vcoreSeconds
from
(SELECTtop.job_id,row_number() over(distribute by top.applicationId ORDER BY sso.id) as num,case when sso.name is null then operatorelse sso.name end as user,top.applicationId,top.memorySeconds,top.startedTime,top.finishedTime,top.elapsedTime,top.vcoreSecondsFROM (
select * from sucx_hera.dws_hera_task_mem_top_10 where dt 20200901 ) topleft join bi_ods.ods_hera_job_monitor monitoron monitor.dt20200901 and top.job_idmonitor.job_idleft join bi_ods.ods_hera_sso ssoon sso.dt20200901 and find_in_set(sso.id,monitor.user_ids) 0 order by job_id ) tempwhere temp.num 1执行后查看 ads_hera_task_mem_top_10 表级血缘 注意此包不支持 spark 字段的支持。
如果需要spark字段的支持一种是spark代码转成hive跑一遍一种就是需要自研了。
八、Atlas二次开发
atlas虽好但是很多场景依然无法满足我们的需要。这时候就不得不做一些改动了。二次开发有两种方式一种是基于Atlas Api的开发一种是修改源码。
8.1 REST API
http://atlas.apache.org/api/v2/index.html
DiscoveryREST
http://hostname:21000/api/atlas/v2/search/basic?classificationclass1
参数支持query、typeName、classification、excludeDeletedEntities、limit、offset
codehttps://github.com/apache/atlas/blob/6bacbe946bbc5ca72118304770d5ad920695bd52/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java# 查询所有 Table
http://hostname:21000/api/atlas/v2/search/dsl?typeNameTable# 查询 owner 前缀为 John 的 Table
http://hostname:21000/api/atlas/v2/search/attribute?typeNameTableattrNameownerattrValuePrefixJohn# 查询 Table 的一些属性如guid, ownerName, searchParameters 等
http://hostname:21000/api/atlas/v2/search/saved/Table# 不是很懂返回的数据和上面那个 API 一模一样
http://hostname:21000/api/atlas/v2/search/saved# 查询 EntityType - Table 下有哪些 entity.
http://hostname:21000/api/atlas/v2/search/saved/execute/Table# 查询 guid 为 e283d8c1-ae19-4f4b-80c0-38031788383b 的 EntityType 下有哪些 entity.
http://hostname:21000/api/atlas/v2/search/saved/execute/guid/e283d8c1-ae19-4f4b-80c0-38031788383bLineageREST
# 查询 guid 为 a95cb57f-4643-4edf-b5a5-0f1de2e0f076 的实体的血缘
http://hostname:21000/api/atlas/v2/lineage/a95cb57f-4643-4edf-b5a5-0f1de2e0f076EntityREST
# 查询 guid 为 48f29229-47a9-4b05-b053-91e6484f42a1 的实体
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1# 查询 guid 为 48f29229-47a9-4b05-b053-91e6484f42a1 的实体的审计数据
http://hostname:21000/api/atlas/v2/entity/48f29229-47a9-4b05-b053-91e6484f42a1/audit# 查询 guid 为 48f29229-47a9-4b05-b053-91e6484f42a1 的实体所属的 classifications
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1/classifications# 根据 EntityType 的唯一属性查找实体
# 如下name 是 DB 的一个唯一属性. 查找 nameLogging 的 DB.
http://hostname:21000/api/atlas/v2/entity/uniqueAttribute/type/DB?attr:nameLogging# 查询 entity 与 classification 是否有关
http://hostname:21000/api/atlas/v2/entity/guid/48f29229-47a9-4b05-b053-91e6484f42a1/classification/Dimension# 批量查询实体
http://hostname:21000/api/atlas/v2/entity/bulk?guide667f337-8dcc-468b-a5d0-96473f8ede26guida95cb57f-4643-4edf-b5a5-0f1de2e0f076RelationshipREST
# 查询 guid 为 726c0120-19d2-4978-b38d-b03124033f41 的 relationship
# 注relationship 可以看做是血缘的一条边
http://hostname:21000/api/atlas/v2/relationship/guid/726c0120-19d2-4978-b38d-b03124033f41TypesREST
http://hostname:21000/api/atlas/v2/types/typedef/guid/e0ca4c40-6165-4cec-b489-2b8e5fc7112b
http://hostname:21000/api/atlas/v2/types/typedef/name/Table
http://hostname:21000/api/atlas/v2/types/typedefs/headers
http://hostname:21000/api/atlas/v2/types/typedefs
http://hostname:21000/api/atlas/v2/types/enumdef/name/hive_principal_type
http://hostname:21000/api/atlas/v2/types/enumdef/guid/ee30446a-92e1-4bbc-aa0a-66ac21970d88
http://hostname:21000/api/atlas/v2/types/structdef/name/hive_order
http://hostname:21000/api/atlas/v2/types/structdef/guid/0b602605-8c88-4b60-a177-c1c671265294
http://hostname:21000/api/atlas/v2/types/classificationdef/name/PII
http://hostname:21000/api/atlas/v2/types/classificationdef/guid/3992eef8-fd74-4ae7-8b35-fead363b2122
http://hostname:21000/api/atlas/v2/types/entitydef/name/DataSet
http://hostname:21000/api/atlas/v2/types/entitydef/guid/5dca20ce-7d57-4bc3-a3f1-93fa622c32b1
http://hostname:21000/api/atlas/v2/types/relationshipdef/name/process_dataset_outputs
http://hostname:21000/api/atlas/v2/types/relationshipdef/guid/5d76dae0-6bad-4d19-b9b2-cb0cdc3b53d5GlossaryREST
http://hostname:21000/api/atlas/v2/glossary
http://hostname:21000/api/atlas/v2/glossary/302dc8f8-3bc8-4878-9ba2-0c585ca6de3d8.2 本地开发环境
启动HBase和solr
由于在Atlas需要使用到HBase以及slor。方便调试可以解压之前编译好内置HBase和sole的tar。
文件补充
创建文件夹将atlas所需要的文件拷贝过去。
将编译内置HBase以及solr源码目录distro/target/conf下的文件拷贝到上述的上图的conf目录。
将源码中addons/models下所有的文件拷贝过去。
将源码中的atlas/webapp/target中的内容全部拷贝到webapp目录中。
源码启动
将clone下来的源码导入到IDEA中。配置启动参数
-Datlas.home/opt/deploy
-Datlas.conf/opt/deploy/conf
-Datlas.data/opt/deploy/data附录A
A.1 参考文章
http://atlas.apache.org/atlas 初体验环境篇Atlas2.1.0兼容CDH6.3.2部署数据治理—Apache Atlas元数据管理Apache Atlas数据治理和元数据框架元数据管理atlas导入hive和hbase元数据以及生成血缘别人家的元数据系统是怎么设计的基于Apache doris的元数据管理系统
A.2 源码分析
Apache-atlas-kafka-hook-源码分析apache-atlas-hive-hook-源码分析apache-atlas-hive-bridge-源码分析apache-atlas-hbase-hook源码分析apache-atlas-hbase-bridge-源码分析