Apache Atlas
引言
当下金融行业场景丰富,如风控、智慧决策等不同种类的业务依赖于机器学习、深度学习等AI框架,算法人员在针对不同业务建模过程中,难免会遇到处理相同特征的情况。 如何在大量复杂特征中帮助算法和业务人员更清晰的了解元数据信息、理解特征之间的血缘关系,更快速地理解业务场景,构建算法模型成为了特征平台亟需解决的问题。
基础概念
Apache Atlas官网给出的定义十分明确”a scalable and extensible set of core foundational governance services“,强调Atlas作为面向Hadoop生态的基础治理服务,向用户提供元数据管理和治理功能,以建立其数据资产的目录。
这里将本文用到的一些技术组件和术语进行解释说明,以便您更好地理解Apache Atlas。
术语 | 解释 |
---|---|
MetaData | 不同数据源的元数据信息,如database、table、schema等信息 |
血缘关系 | 描述数据加工组合、转换的链路关系 |
Hook | 钩子,配置在不同数据源上,用于捕获数据的变化 |
Bridge | Atlas提供的用于初次导入元数据的组件 |
JanusGraph | 一种开源的分布式图数据库 ,支持高并发复杂实时图遍历,支持多存储后端,支持多索引后端 |
Type | 一个或一组元数据对象属性,相当于面向对象的Class定义,Atlas支持的Type有Hive_db、hive_table、hive_process等 |
Entity | 基于Type定义的现实世界中的特定元数据对象,相当于面向对象对象的Object定义 |
框架介绍
Apache Atlas采用分层设计的思想,设计者将其分为三层,第一层包含MetaData(用户所需的元数据)和Apps(权限管理/Web UI/业务分类);第二层为数据采集层(Kafka消息队列和API方式),数据采集层既考虑了初始元数据的采集,又通过kafka消息队列及时地收集元数据的更新;底层即平台核心层(包括数据采集与导出/基于JanusGraph的数据存储/元数据对象的管理),基于JanusGraph的图数据库存储可以更好地支持复杂的数据类型和血缘数据的读写。
Apache Atlas内部实现了元数据的首次接入和后续实时更新机制,当Atlas第一次采集元数据时,需使用其提供的不同Bridge导入不同数据源的元数据信息。后续用户DML等操作导致元数据变更时,Atlas内嵌到不同数据源的Hook发挥了作用,实时捕获到元数据变更的Event并发送至Kafka消息中间件不同topic中,Kafka作为通知服务器用于hook和MetaData通知事件的下游消费者之间的通信。为了用于有向图灵活的存储、查询数据血缘关系等需求,Atlas将Bridge和Hook收集到的数据都存储至JanusGraph,其中HBase用于存储血缘关系数据,Solr用于存储血缘索引,作为搜索引擎加速血缘关系数据的检索。
Hive Hook介绍
为了让大家更清晰地了解Apache Atlas如何获取元数据并进行管理,本文以Hive hook获取Hive元数据为例介绍Apache Atlas的Hook设计。
配置hive hook完成后,Apache Atlas将会监听用户的如下HQL操作:
- 创建数据库
- 创建表/视图,数据表迁移
- 加载/导入/导出数据
- DML操作
- 修改数据库
- 修改数据表(如排序、倾斜表)
- 修改视图
Atlas基于Hive自身提供的Hook和自定义的AtlasHook实现了HiveHook,通过实现ExecuteWithHookContext的run方法,可以随时捕获HookContext上下文信息,基于Atlsa创建不同Event(事件)后由Atlas的notifyEntities方法发送消息至Atlas进行存储。如下为HiveHook的UML图:
本文以修改数据库操作为例为您介绍HiveHook工作原理,当开发者基于HQL对Hive数据操作时,HiveHook检测到元数据发生变更,首先获取HookContext上下文信息,根据hookcontext判断operation为修改数据库操作并调用AlterDatabase(基于抽象类BaseHiveEvent实现的不同Event)创建Event,其次调用notifyEntities通知Atlas有Event到达,接下来Atlas调用createNotificationMessages将Event中的json数据解析为messages,最后将messages组装为KafkaProducerRecord后调用sendInternalToProducer发送至Kafka的不同topic中。
用户配置Hive Hook操作如下:
1、用户需在hive-site.xml文件中配置如下信息。
<property>
<name>hive.exec.post.hooks</name>
<value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
2、配置hive hook和hive conf信息
tar -zxvf apache-atlas-2.1.0-hive-hook.tar.gz
cp apache-atlas-2.1.0-hive-hook/hook /usr/local/bigdata/apache-atlas-2.1.0/hook/hive
/usr/loca/bigdata/conf/hive-env.sh添加“export HIVE_AUX_JARS_PATH = /usr/local/bigdata/apache-atlas-2.1.0/hook/hive”
cp /usr/local/bigdata/apache-atlas-2.1.0/conf/atlas-application.properties /usr/local/bigdata/hive/conf
3、导入hive元数据信息
Apache Atlas为我们提供了脚本导入元数据的方式,用于业务初始时将Apache Hive数据库和表的元数据导入Apache Atlas。脚本使用方式如下:
# 导入所有hive metastore信息
Usage 1: <atlas package>/hook-bin/import-hive.sh
# 指定数据库和数据表导入metastore
Usage 2: <atlas package>/hook-bin/import-hive.sh [-d database] [-t table]
# 通过文件形式导入metastore
Usage 3: <atlas package>/hook-bin/import-hive.sh [-f <filename>]
File Format:
database1:tbl1
database1:tbl2
database2:tbl1
安装
Apache Atlas官网提供了多版本的源码文件,需用户自行完成编译方可使用,整个构建过程大约1个半小时,本文使用最新的2.1.0版本完成安装演示。
tar -zxvf apache-atlas-2.1.0-sources.tar.gz -C /usr/download
cd /usr/download/apache-atlas-sources-2.1.0
# 采用这种编译方式会内嵌HBase和Solr
mvn clean -DskipTests package -Pdist,embedded-hbase-solr
cp /usr/download/apache-atlas-sources-2.1.0/distro/target/apache-atlas-2.1.0-bin.tar.gz /usr/local/bigdata
tar zxvf /usr/local/bigdata/apache-atlas-2.1.0-bin.tar.gz -C /usr/local/bigdata
cd /usr/local/bigdata/apache-atlas-2.1.0
export MANAGE_LOCAL_HBASE=true
export MANAGE_LOCAL_SOLR=true
bin/atlas_start.py
如果用户希望在Apache Atlas的基础上进行二次开发,服务启动成功后,可以通过以下命令校验服务是否正常启动。
curl -u admin:admin http://localhost:21000/api/atlas/admin/version
Apache Atlas内置了demo供用户测试使用,用户可以通过以下命令学习如何进行元数据血缘关系管理。
bin/quick_start.py
Enter username for atlas :-
Enter password for atlas :-
案例
本节通过在hive客户端操作student表为您介绍Apache Atlas如何展示血缘关系。
1、首先我们创建原始hive表student,并基于student创建新表student_target。
create table student (name STRING,age INT);
insert into table student values("xiaoming",20);
create table student_target as select * from student;
2、创建成功后,我们可以在default库中发现我们创建的两张hive表。
3、选中student_target后并点击后,用户可以在Lineage标签页查看表之间的血缘关系。
点击血缘关系图中的create table student,我们可以查看该操作的hive_process信息。
结论
Apache Atlas作为一款优秀的开源数据治理服务,不仅为用户解决了元数据管理和血缘关系分析,同时支持开发者进行二次定制开发。但由于Atlas引入了大量组件以实现其数据治理的核心功能,基于其开发的特征平台有些笨重。因此特征平台当前版本亟需解决的血缘关系可以参考Atlas的架构和数据结构设计,以实现数据源的元数据管理和表级别的血缘关系治理。