企业在数字化转型中会遇到各业务系统多,建设历程长,数据缺乏统一维护,从而导致数据无法贯通,数据字典缺失等问题。数据流转关系往往保留在业务或技术人员的脑海中,难以充分利用和传承。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程序实现自动获取数据库的元数据,参考这里。