最近我们想借助Apache Atlas的REST API做一个元数据管理平台,因此就搭建了一套Atlas的环境,由于我们的大数据平台是CDH平台,集成Atlas的资料很少,所以在构建Atlas 环境的时候也遇到了不少坑,所以特整理此篇文来记录一下。
1. Apache Atlas 简介
Apache Atlas是一个可伸缩的核心数据基础治理服务组件,为我们提供了开放元数据管理和数据治理的功能,自动构建数据资产的目录,对这些资产进行分类和治理,并提供了UI界面和REST API,让我们更直观的看到数据流转的过程以及数据的血缘关系。
2. 组件安装
由于CDH 5.12.1版本的大数据组件版本较低,所以这里选用的Atlas早期版本0.8.4.
2.1 各组件版本
- CDH 5.12.1
- Hbase 1.2.0(cdh内置)
- Solr 5.5.1(额外安装)
- Zookeeper 3.4.5(cdh内置)
- Kafka 0.10(cdh内置)
- Hadoop 2.6.0(cdh内置)
- Hive 1.1.0 (cdh内置)
- Atlas 0.8.4(额外安装)
除了 Solr 和 Atlas ,其他的都是CDH平台内置的,所以只需安装Solr和Atlas即可。
2.2 编译Atlas
官网只提供Atlas源码,安装时需要自行编译,从https://atlas.apache.org 处下载自己需要的源码包,然后就开始编译了(提前设置好Maven镜像源)。
tar zxvf apache-atlas-0.8.4-sources.tar.gzmv apache-atlas-sources-0.8.4 atlascd atlasmvn clean -DskipTests install#外置HBase & Solr编译方式mvn clean -DskipTests package -Pdist#内置HBase & Solr编译方式mvn clean -DskipTests package -Pdist,embedded-hbase-solr
这里需要注意的是,有几个依赖包会下载失败,解决办法就是手动下载并安装到Maven本地仓库或者设置依赖包的镜像源。
编译好之后,在atlas/distro/target下就能看到编译好的二进制包。
2.3 组件安装
- Solr的安装
Atlas 0.8.4 依赖的Solr是5.5.1版本的,选择3台服务器,将Solr安装包解压,然后修改配置文件,这里需要注意的是,为了防止Solr 将文件写到 ZooKeeper 根目录下,我们需要手动修改一下Solr以及Atlas的配置(这里跟官方文档不一样):
vim bin/solr.in.sh然后修改以下配置:ZK_HOST="cdh02:2181,cdh03:2181,cdh01:2181/solr"
也就是在ZK_HOST后加上路径/solr。
另外,我们还需要手动增加ZooKeeper的命名空间,通过zkCli在ZooKeeper中创建/solr
节点,进入zookeeper客户端手动执行:
create /solr "solr"
如果不手动创建这个 solr 节点的话,启动 Solr 就会报错:
A chroot was specified in ZkHost but the znode doesn't exist. \ cdh02:2181,cdh03:2181,cdh01:2181/solr
上述操作完成之后就可以启动 Solr 了,然后就可以在Zookeeper客户端看到Solr在Znode中的元数据信息:
[zk: localhost:2181(CONNECTED) 4] ls /[cluster, configs, brokers, data, admin, isr_change_notification, dubbo, mycat, rmstore, solr, consumers, hive_zookeeper_namespace_hive, hbase, controller, zookeeper, yarn-leader-election, hadoop-ha, controller_epoch, druid, kafka-manager, config, kylin][zk: localhost:2181(CONNECTED) 5] ls /solr[configs, overseer, aliases.json, live_nodes, collections, overseer_elect, security.json, clusterstate.json][zk: localhost:2181(CONNECTED) 6] ls /solr/live_nodes[cdh05:8983_solr, cdh04:8983_solr, cdh03:8983_solr]
在Solr的Web页面(http://${host}:8983,host是任意一台solr主机)也可以看到相关信息:
除了上边的设置,还需要修改一下时区,要不然日志以及Solr中的记录都是用的UTC时间:
SOLR_TIMEZONE="Asia/Shanghai"
- Atlas的安装
将编译好的Atlas二进制文件,解压到/data/software/atlas下,0.8.4版本Atlas
的graph
索引只能放在solr中,还不支持ElasticSearch
,1.0.0版本才支持graph
索引放在ElasticSearch中,因为我们前面把solr的在zookeeper中的信息目录设置在了/solr
节点下,所以我们需要设置zookeeper-url
后加上/solr
如下(这里与官方文档也不一样):
atlas.graph.index.search.solr.zookeeper-url=cdh01:2181,cdh02:2181,cdh03:2181/solr
3. Atlas 与 Hive 集成
因为Hive是CDH集成的,所以这里跟官方文档提供的方法也不太一样。
第一步,修改atlas的配置文件
######### Hive Hook Configs #######atlas.hook.hive.synchronous=falseatlas.hook.hive.numRetries=3atlas.hook.hive.queueSize=10000atlas.cluster.name=primary
第二步,将Atlas与Hive的集成依赖jar包放在Hive的classpath下。
大部分资料都是说设置 HIVE_AUX_JARS_PATH,我也在CM界面设置了,但是不起作用,后来就想了一个更加简单的办法,也不用修改配置文件,因为CDH集成的Hive本身也有一个auxlib 目录"/opt/cloudera/parcels/CDH/lib/hive/auxlib",我们只需要将集成jar包放在hive的auxlib下就可以了:
我这里是做了一个软连接,也是可以的。
第三步,将 atlas-application.properties
压缩到 atlas-plugin-classloader-0.4.8.jar
内:
注意:必须是同级目录,atlas-application.properties
前边不能加路径
zip -u atlas-plugin-classloader-0.4.8.jar atlas-application.properties
这是因为CDH平台管理的Hive在运行时,会复制一份conf下关于hive的配置文件到process目录下,Hive在运行的时候就会因为读不到atlas-application.properties配置而报错。
第四步,配置hive-site.xml
hive.exec.post.hooks org.apache.atlas.hive.hook.HiveHook
这里也有需要注意的点:
如上图,两个hive-site.xml选项都配置上,这样在Hue
以及服务器客户端(即命令行
)都可以使Atlas监听Hive的事件。
4. Atlas 与 Solr 集成
将Atlas的conf目录下的solr文件夹复制到Solr集群各节点的安装目录下
cp -r /data/software/atlas/conf/solr /data/software/solr
然后修改文件名:
cd /data/software/solrmv solr apache_atlas_conf
如图$ATLAS_HOME:
如图$SOLR_HOME:
然后在$SOLR_HOME下执行:
bin/solr create -c vertex_index -d apache_atlas_conf -shards 3 -replicationFactorbin/solr create -c edge_index -d apache_atlas_conf -shards 3 -replicationFactor 2bin/solr create -c fulltext_index -d apache_atlas_conf -shards 3 -replicationFactor 2
然后登陆Solr的Web控制台(http://${solrhost}:8983)就能看到如下界面,:
5. Atlas 与 Kafka 集成
直接修改配置即可,这里需要注意的是zookeeper的URL也需要指定节点/kafka
vim atlas-application.properties######### Notification Configs #########atlas.notification.embedded=falseatlas.kafka.data=${sys:atlas.home}/data/kafkaatlas.kafka.zookeeper.connect=cdh02:2181,cdh03:2181,cdh01:2181/kafkaatlas.kafka.bootstrap.servers=cdh02:9092,cdh03:9092,cdh04:9092atlas.kafka.zookeeper.session.timeout.ms=4000atlas.kafka.zookeeper.connection.timeout.ms=2000atlas.kafka.enable.auto.commit=true
另外我们也可以从配置文件里看出其他有关kafka的配置,这里也可以按需修改:
atlas.kafka.auto.commit.interval.ms=1000atlas.kafka.hook.group.id=atlasatlas.kafka.enable.auto.commit=falseatlas.kafka.auto.offset.reset=earliestatlas.kafka.session.timeout.ms=30000atlas.kafka.poll.timeout.ms=1000atlas.notification.create.topics=trueatlas.notification.replicas=1atlas.notification.topics=ATLAS_HOOK,ATLAS_ENTITIESatlas.notification.log.failed.messages=trueatlas.notification.consumer.retry.interval=500atlas.notification.hook.retry.interval=1000
虽然配置文件里配了可以自动创建topic,为了便于管理,我们最好还是手动创建一下,这两个topic——ATLAS_HOOK,ATLAS_ENTITIES。
当然,Atlas也给我们提供了创建这两个topic的脚本:
bin/atlas_kafka_setup.py
6. Atlas 与 Hbase 集成
vim atlas-application.properties#修改atlas存储数据主机atlas.graph.storage.hostname=cdh02:2181,cdh03:2181,cdh04:2181######### Entity Audit Configs #########atlas.audit.hbase.zookeeper.quorum=cdh02:2181,cdh03:2181,cdh04:2181
将Hbase的配置软连接至/data/software/atlas/conf/hbase
cd /data/software/atlas/conf/hbaseln -s /etc/hbase/conf conf
然后配置HBase配置文件路径
cd /data/software/atlas/confvim atlas-env.sh#添加HBase配置文件路径export HBASE_CONF_DIR=/data/software/atlas/conf/hbase/conf
7. 启动并使用 Atlas
首先需要重启一下大数据集群内的相关组件,使配置生效。
进入Hive客户端,执行如下命令,检查Hive配置是否生效:
set hive.exec.post.hooks;set hive.aux.jars.path;
Atlas也可以配置HA,我这里仅仅只配置一个单节点,具体细节可参考官网,另外这里也有需要注意的,Atlas默认的端口是21000,CDH平台的Impala也用到了这个端口,为了避免端口冲突,我这里修改了为了21001端口:
## Server port configurationatlas.server.http.port=21001######### Server Properties #########atlas.rest.address=http://cdh05:21001
一切准备好后就可以启动Atlas了:
bin/atlas_start.py
等待服务启动成功后,然后登陆http://cdh05:21001 就可以看到登陆界面了,账户名密码都是admin,登陆。
首次启动,Atlas 内是没有Hive的元数据的,第一次需要手动导入
bin/import-hive.sh
可以查看logs下的import-hive.log,查看元数据是否导入成功。
元数据导入后,就可以在Atlas中看到hive中的数据了,测试一下,查询hive库:
元数据导入之后,在没有执行SQL之前,是看不到表的血缘关系的,所以我们就创建一张表测试一下,先创建一张表,然后join多张表插入数据,然后打开Atlas界面就可以看到实时生成的血缘关系图了:
总结
到此,Atlas环境基本已经安装完成了,接下来就可以愉快的调用Atlas的REST API来构建自己的应用了。
https://atlas.apache.org/0.8.4/api/v2/index.html