本文档共分为8个部分,层级结构如下图所示。
一、数据治理与元数据管理
背景
为什么要做数据治理?业务繁多,数据繁多,业务数据不断迭代。人员流动,文档不全,逻辑不清楚,对于数据很难直观理解,后期很难维护。
在大数据研发中,原始数据就有着非常多的数据库,数据表。
而经过数据的聚合以后,又会有很多的维度表。
近几年来数据的量级在疯狂的增长,由此带来了系列的问题。作为对人工智能团队的数据支撑,我们听到的最多的质疑是 “正确的数据集”,他们需要正确的数据用于他们的分析。我们开始意识到,虽然我们构建了高度可扩展的数据存储,实时计算等等能力,但是我们的团队仍然在浪费时间寻找合适的数据集来进行分析。
也就是我们缺乏对数据资产的管理。事实上,有很多公司都提供了开源的解决方案来解决上述问题,这也就是数据发现与元数据管理工具。
元数据管理
简单地说,元数据管理是为了对数据资产进行有效的组织。它使用元数据来帮助管理他们的数据。它还可以帮助数据专业人员收集、组织、访问和丰富元数据,以支持数据治理。
三十年前,数据资产可能是 Oracle 数据库中的一张表。然而,在现代企业中,我们拥有一系列令人眼花缭乱的不同类型的数据资产。可能是关系数据库或 NoSQL 存储中的表、实时流数据、 AI 系统中的功能、指标平台中的指标,数据可视化工具中的仪表板。
现代元数据管理应包含所有这些类型的数据资产,并使数据工作者能够更高效地使用这些资产完成工作。
所以,元数据管理应具备的功能如下:
- 搜索和发现:数据表、字段、标签、使用信息
- 访问控制:访问控制组、用户、策略
- 数据血缘:管道执行、查询
- 合规性:数据隐私/合规性注释类型的分类
- 数据管理:数据源配置、摄取配置、保留配置、数据清除策略
- AI 可解释性、再现性:特征定义、模型定义、训练运行执行、问题陈述
- 数据操作:管道执行、处理的数据分区、数据统计
- 数据质量:数据质量规则定义、规则执行结果、数据统计
架构与开源方案
下面介绍元数据管理的架构实现,不同的架构都对应了不同的开源实现。
下图描述了第一代元数据架构。它通常是一个经典的单体前端(可能是一个 Flask 应用程序),连接到主要存储进行查询(通常是 MySQL/Postgres),一个用于提供搜索查询的搜索索引(通常是 Elasticsearch),并且对于这种架构的第 1.5 代,也许一旦达到关系数据库的“递归查询”限制,就使用了处理谱系(通常是 Neo4j)图形查询的图形索引。
很快,第二代的架构出现了。单体应用程序已拆分为位于元数据存储数据库前面的服务。该服务提供了一个 API,允许使用推送机制将元数据写入系统。
第三代架构是基于事件的元数据管理架构,客户可以根据他们的需要以不同的方式与元数据数据库交互。
元数据的低延迟查找、对元数据属性进行全文和排名搜索的能力、对元数据关系的图形查询以及全扫描和分析能力。
Apache Atlas 就是采用的这种架构,并且与Hadoop 生态系统紧密耦合。
下图是当今元数据格局的简单直观表示:
(包含部分非开源方案)
其他方案可作为调研的主要方向,但不是本文讨论的重点。
二、Apache Atlas简介
简介
在当今大数据的应用越来越广泛的情况下,数据治理一直是企业面临的巨大问题。
大部分公司只是单纯的对数据进行了处理,而数据的血缘,分类等等却很难实现,市场上也急需要一个专注于数据治理的技术框架,这时Atlas应运而生。
Atlas官网地址:https://atlas.apache.org/
Atlas是Hadoop的数据治理和元数据框架。
Atlas是一组可扩展和可扩展的核心基础治理服务,使企业能够有效,高效地满足Hadoop中的合规性要求,并允许与整个企业数据生态系统集成。
Apache Atlas为组织提供了开放的元数据管理和治理功能,以建立其数据资产的目录,对这些资产进行分类和治理,并为数据科学家,分析师和数据治理团队提供围绕这些数据资产的协作功能。
如果想要对这些数据做好管理,光用文字、文档等东西是不够的,必须用图。Atlas就是把元数据变成图的工具。
特性
- Atlas支持各种Hadoop和非Hadoop元数据类型
- 提供了丰富的REST API进行集成
- 对数据血缘的追溯达到了字段级别,这种技术还没有其实类似框架可以实现
- 对权限也有很好的控制
Atlas包括以下组件:
- 采用Hbase存储元数据
- 采用Solr实现索引
- Ingest/Export 采集导出组件 Type System类型系统 Graph Engine图形引擎 共同构成Atlas的核心机制
- 所有功能通过API向用户提供,也可以通过Kafka消息系统进行集成
- Atlas支持各种源获取元数据:Hive,Sqoop,Storm。。。
- 还有优秀的UI支持
效果图
三、整体架构
架构图
Atlas架构图如下:
Core层
Atlas核心包含以下组件:
类型(Type)系统: Atlas允许用户为他们想要管理的元数据对象定义模型。该模型由称为“类型”的定义组成。称为“实体”的“类型”实例表示受管理的实际元数据对象。Type System是一个允许用户定义和管理类型和实体的组件。开箱即用的Atlas管理的所有元数据对象(例如Hive表)都使用类型建模并表示为实体。要在Atlas中存储新类型的元数据,需要了解类型系统组件的概念。
需要注意的一个关键点是Atlas中建模的一般特性允许数据管理员和集成商定义技术元数据和业务元数据。也可以使用Atlas的功能定义两者之间的丰富关系。
图形引擎: Atlas在内部使用Graph模型持久保存它管理的元数据对象。这种方法提供了很大的灵活性,可以有效地处理元数据对象之间的丰富关系。图形引擎组件负责在Atlas类型系统的类型和实体之间进行转换,以及底层图形持久性模型。除了管理图形对象之外,图形引擎还为元数据对象创建适当的索引,以便可以有效地搜索它们。Atlas使用JanusGraph存储元数据对象。
采集/导出:采集组件允许将元数据添加到Atlas。同样,“导出”组件将Atlas检测到的元数据更改公开为事件。消费者可以使用这些更改事件来实时响应元数据的变更。
Integration层
在Atlas中,用户可以使用以下的两种方式管理元数据:
API: Atlas的所有功能都通过REST API向最终用户暴露,该API允许创建,更新和删除类型和实体。它也是查询和发现Atlas管理的类型和实体的主要机制。
Messaging: 除了API之外,用户还可以选择使用基于Kafka的消息传递接口与Atlas集成。这对于将元数据对象传递到Atlas以及使用Atlas使用可以构建应用程序的元数据更改事件都很有用。如果希望使用与Atlas更松散耦合的集成来实现更好的可伸缩性,可靠性等,则消息传递接口特别有用.Atlas使用Apache Kafka作为通知服务器,用于钩子和元数据通知事件的下游消费者之间的通信。事件由钩子和Atlas写入不同的Kafka主题。
Metadata sources层
Atlas支持开箱即用的多种元数据源集成。未来还将增加更多集成。目前,Atlas支持从以下来源提取和管理元数据:
- HBase
- Hive
- Sqoop
- Storm
- Kafka
集成意味着两件事:Atlas定义的元数据模型用于表示这些组件的对象。Atlas提供了从这些组件中摄取元数据对象的组件(在某些情况下实时或以批处理模式)。
Applications层
Atlas管理的元数据被各种应用程序使用,以满足许多治理需求。
Atlas Admin UI: 该组件是一个基于Web的应用程序,允许数据管理员和科学家发现和注释元数据。这里最重要的是搜索界面和类似SQL的查询语言,可用于查询Atlas管理的元数据类型和对象。Admin UI使用Atlas的REST API来构建其功能。
Tag Based Policies:Apache Ranger是Hadoop生态系统的高级安全管理解决方案,可与各种Hadoop组件进行广泛集成。通过与Atlas集成,Ranger允许安全管理员定义元数据驱动的安全策略以实现有效的治理。Ranger是Atlas通知的元数据更改事件的使用者。
四、编译、部署与安装
Atlas的安装坑较多。本教程将详细介绍Atlas2.1.0整个安装过程。
比较难受的是 ,Atlas不提供安装包,下载的是源码包 ,需要自行编译打包。
下载
请前往官网 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
安装maven
注意,需要先安装maven,因为这是使用maven开发的java web工程。maven3.6.3版本即可
一些下载地址
http://maven.apache.org/download.cgi
上传到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 PATH=MAVEN_HOME/bin:PATH
刷新环境变量
source /etc/profile
检查版本
mvn -v
配置好maven的环境变量 注意国内需要配置好maven的国内镜像,一般使用阿里,华为,清华等镜像 vi /usr/local/apache-maven-3.6.3/conf/settings.xml
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
把这个setting.xml 拷贝到 ~/.m2/
cp settings.xml .m2/
编译Atlas
解压源码包
tar -zxvf apache-atlas-2.1.0-sources.tar.gz
1.修改atlas源码工程的pom.xml
将hbase zookeeper hive等依赖的版本修改成自己环境中一致的版本(或者兼容的版本)
父工程pom文件 <zookeeper.version>3.4.14</zookeeper.version> <hbase.version>2.2.3</hbase.version> <solr.version>7.7.2</solr.version>
2.执行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就是成功了
安装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 2 bin/solr create -c edge_index -shards 3 -replicationFactor 2 bin/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.gz
3、修改配置
进入conf目录下:
vi atlas-env.sh
在此指定JAVA_HOME和是否要用内嵌启动
export JAVA_HOME=/opt/jdk1.8.0_191/ export MANAGE_LOCAL_HBASE=true export MANAGE_LOCAL_SOLR=true
如果使用内嵌,那么配置结束,直接去 启动Atlas
但是大部分时候,需要使用已经有的组件进行集成,所以设置为false。
export JAVA_HOME=/opt/jdk1.8.0_191/ export MANAGE_LOCAL_HBASE=false export MANAGE_LOCAL_SOLR=false #注意修改Hbase配置文件路径 export HBASE_CONF_DIR=/opt/hbase/conf
修改其他配置
vim atlas-application.properties
这里就是设置Hbase Solr等配置
#Hbase地址 就是Hbase配置的zookeeper地址 atlas.graph.storage.hostname=slave01:2181,slave02:2181,slave03:2181 atlas.audit.hbase.zookeeper.quorum=slave01:2181,slave02:2181,slave03:2181 #solr服务器地址 atlas.graph.index.search.solr.http-urls=http://slave01:8984/solr #kafka地址 atlas.notification.embedded=false atlas.kafka.zookeeper.connect=slave01:2181,slave02:2181,slave03:2181 atlas.kafka.bootstrap.servers=slave01:9092,slave02:9092,slave03:9092 #atlas地址 atlas.rest.address=http://slave01:21000
启动Atlas
bin/atlas_start.py
启动成功后访问:
http://slave01:21000
admin/admin登录