企业在数字化转型中会遇到各业务系统多,建设历程长,数据缺乏统一维护,从而导致数据无法贯通,数据字典缺失等问题。数据流转关系往往保留在业务或技术人员的脑海中,难以充分利用和传承。Apache Atlas就是为解决这些问题而产生的数据治理工具,利用Atlas可以自动构建数据字典,自动生成数据血缘,快速检索数据资源,不仅支持Hadoop生态的Hive、HBase、Sqoop等组件,还可以支持传统关系型数据库。
一、框架
上图可以看出,Atlas的框架有两个特点,一是基于Hadoop生态组件搭建,二是架构有些复杂。搭建Atlas需要一定的Hadoop基础知识,和十足的耐心,但使用的话不需要太了解底层的架构,使用界面比较傻瓜。
从架构图左上角开始,Atlas分析的数据来自于各类数据库自身的元数据(描述数据的数据,比如描述数据的建表语句、存储位置、关联关系等等)。再下来,采集元数据是通过Messaging组件实现的,其实就是Kafka。再下面,元数据进入Atlas的Core核心组件,为数据治理提供元数据导入导出、类型系统(也就是对库、表、字段等数据管理对象定义模型)、图形引擎(使用图模型保存元数据对象)。再向下,是通过JanusGraph把图模型转换为K-V数据保存于HBase中,使用Solr进行数据的搜索。接下来向上看,Atlas支持API的交互以控制core组件。再向上,通过Web应用封装API实现常规的使用(如数据元信息获取、血缘分析等)。
二、部署
从架构上看,Atlas的部署是一个很有挑战的活。要部署Hadoop集群(搭建并调试起HDFS、Yarn等基本组件)、Kafka集群(依赖Zookeeper)、HBase集群、Solr集群,由于需要一个数据源提供元数据,还需要搭建Hive(同时配套Mysql)。搭好这一堆后,再部署Atlas的应用。搭建的过程可以参考B站视频教程。
提一些建议,首先是搭建的过程中涉及大量的配置,千万别写错了,否则排查起来很困难。搭建调试好后,可以检查一下进程如下即可:
=============== hadoop102 ===============
2754 JobHistoryServer
5349 Kafka
12841 Atlas
17913 HMaster
2604 NodeManager
18108 HRegionServer
2237 DataNode
2990 QuorumPeerMain
2094 NameNode
=============== hadoop103 ===============
3943 Kafka
1899 DataNode
2732 QuorumPeerMain
2077 ResourceManager
2238 NodeManager
9151 HRegionServer
=============== hadoop104 ===============
1904 DataNode
2145 NodeManager
8851 HRegionServer
3652 Kafka
1990 SecondaryNameNode
2395 QuorumPeerMain
其次,注意启停各组件的顺序,参考如下:
477 myhadoop.sh start
478 sudo systemctl start mysqld
479 sudo systemctl status mysqld
480 zk.sh start
481 kf.sh start
482 start-hbase.sh
486 sudo -i -u solr /opt/module/solr/bin/solr start (三台都要启动)
487 cd ..
488 cd ./module/atlas/
490 cd bin/
491 ./atlas_start.py
492 hive
494 ./atlas_stop.py
495 sudo -i -u solr /opt/module/solr/bin/solr stop (三台都要关停)
496 stop-hbase.sh
497 kf.sh stop
498 zk.sh stop
499 myhadoop.sh stop
500 systemctl stop mysqld
看到这个界面就代表搭建成功了,
三、使用
使用起来比较简单,几乎在界面上点点就能摸索出来,不过英文界面很多人不大适应,可以参考这个说明手册,或者B站尚硅谷相关视频的后面几节。
通过Atlas自带的Hive Hook程序可以自动获取Hive的元数据。在Hive中建立几张表,并做出一张表(或视图)带有几张表的join关联,自动就能捕获到每张表的元数据和关联关系,非常方便地查找数据的来源和相关信息。
有些数据库在Atlas中没有Hook程序,也可以通过调用API导入方式实现元数据管理。例如Atlas通过API方式获取Mysql元数据,参考这里。这个过程相当于手动录入元数据信息,还可以自己写个hook程序实现自动获取数据库的元数据,参考这里。