Atlas 是一个可扩展和可扩展的核心基础治理服务集 - 使企业能够有效地和高效地满足 Hadoop 中的合规性要求,并允许与整个企业数据生态系统的集成。[来自百科]
现在我们就基于最新版2.0.0介绍一下部署细节
Server安装 #
- 源码安装
首先在https://www.apache.org/dyn/closer.cgi/atlas/2.0.0/apache-atlas-2.0.0-sources.tar.gz下载2.0.0源码
解压源码
- 选择Atlas架构
Atlas支持多种架构作为后端
- HBase + Solr
- Cassandra + Solr
你可以选择多种,这里我们采用集成HBase + Solr
方式编译
mvn clean -DskipTests package -Pdist,embedded-hbase-solr
执行代码即可(推荐使用阿里云的maven源加速编译)
- 修改环境变量
编译完之后在/distro/target
下面有很多tar.gz包,我们需要的是apache-atlas-2.0.0-server.tar.gz
包,解压到当前目录
3.1 修改配置文件conf/atlas-env.sh
export JAVA_HOME=/your/java/install
export MANAGE_LOCAL_HBASE=false
export MANAGE_LOCAL_SOLR=false
我们设定Solr
和HBase
手动开启,方便我们发现哪个部分启动异常
3.2 修改admin密码:
系统默认会生成一个密码给我们,但是官网我也没看到说这个密码,所以我们自己生成一个,然后修改上去
echo -n "password" | sha256sum
使用上面命令生成一个sha256
加密字符(你可以把password改成你想要的密码),复制生成的字符串(不需要-
),例如5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
修改conf/users-credentials.properties
改成
admin=ADMIN::5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
3.3 修改HBase配置(需要提前安装好java和Zookeeper和Hadoop)
进入hbase
目录夹
修改 conf/hbase-env.sh
export JAVA_HOME=/your/java/install
export HBASE_MANAGES_ZK=false
复制Hadoop配置到HBase中
cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/
cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/
在hbase-site.xml
中加入
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
启动安装好的Zookeeper,使用./bin/start-hbase.sh
启动HBase
使用jps
应该能看到HMaster
和HRegionServer
启动了
测试HBase安装是否完成,使用./bin/hbase shell
进入HBase
命令行,如果status
命令返回正确的话,那么你的HBase就安装好了
3.4 启动Solr
进入solr
目录,启动solr
./bin/solr -c -z localhost:2181 -p 8983
打开http://localhost:8983/solr/#/
如果能看到正常页面,那么Solr就启动好了
在apache-atlas-2.0.0
目录下创建索引
./solr/bin/solr create -c vertex_index -d conf/solr -shards 1 -replicationFactor 1
./solr/bin/solr create -c edge_index -d conf/solr -shards 1 -replicationFactor 1
./solr/bin/solr create -c fulltext_index -d conf/solr -shards 1 -replicationFactor 1
3.5 启动Atlas
在apache-atlas-2.0.0
目录下启动Atlas
使用bin/atlas_start.py
或者 /usr/bin/python2.7 bin/atlas_start.py
PS:第一次启动比较慢,如果前面的HBase和Solr都安装好了的话,一般都没有什么大问题,可以查看logs/application.log
查看系统运行情况,等到初始化完成后打开localhost:21000
使用admin:password
即可登录上去
当然我们现在系统空空如也,现在我们来使用Hook导入数据到Atlas里面去吧
我测试通过的版本是:Hadoop2.8.1 + Zookeeper 3.4.10 ,其他的都是用的默认Atlas 集成的版本
Hook安装 #
Atlas
最强大的的地方就是能够把Hive,Sqoop,Kafka这些大数据组件的血缘关系给自动抽取出来,所以钩子的安装至关重要
Sqoop钩子 #
Sqoop 我用的是
1.4.7
版本
- 配置Sqoop钩子
首先在conf/sqoop-site.xml
中添加
<property>
<name>sqoop.job.data.publish.class</name>
<value>org.apache.atlas.sqoop.hook.SqoopHook</value>
</property>
- 复制必要的包
解压distro/target
的apache-atlas-2.0.0-sqoop-hook.tar.gz
,复制apache-atlas-2.0.0-sqoop-hook/apache-atlas-sqoop-hook-2.0.0/hook/sqoop/
目录到 <atlas package>/hook/sqoop
如:
cd /where/your/untar/atlas
cp -r ../../apache-atlas-2.0.0-sqoop-hook/apache-atlas-sqoop-hook-2.0.0/hook .
创建软链接<atlas-conf>/atlas-application.properties
到<sqoop-conf>/
如:
ln -s ln -s /home/zhanglun/github/apache-atlas-sources-2.0.0/distro/target/apache-atlas-2.0.0-server/apache-atlas-2.0.0/conf/atlas-application.properties /opt/sqoop-1.4.7.bin__hadoop-2.6.0/conf
将<atlas package>/hook/sqoop/*.jar
复制到sqoop
lib
目录
如:
cp hook/sqoop/*.jar /opt/sqoop-1.4.7.bin__hadoop-2.6.0/lib
cp hook/sqoop/atlas-sqoop-plugin-impl/*.jar /opt/sqoop-1.4.7.bin__hadoop-2.6.0/lib
- 测试Sqoop 导入Hive中
sqoop import –connect jdbc:mysql://localhost:3306/sqoop
–username root
-P
–split-by id
–table root
–hive-import
–create-hive-table
–hive-table db.auth_user
不出意外应该会报错
Caused by: java.lang.NullPointerException
at org.apache.atlas.hook.AtlasHook
因为我们还没有配置好Sqoop钩子,接下来我们来配置Sqoop钩子
- 配置Atlas
前面我们创建了软链接,现在我们只要修改conf/atlas-application.properties
这个配置即可
首先我们得配置关闭Kafka
作为发送消息缓冲,因为Atlas默认使用Kafka
作为消息缓冲,然后我们修改下面的配置(这个后期可以打开,你再配置好kafka的地址)
atlas.notification.embedded=false # 不往kafka里面发送
atlas.graph.index.search.backend=solr5
- 异常一: Caused by: java.lang.ClassNotFoundException: org.json.JSONObject
包缺失,下载java-json.jar 到Sqoop
文件夹
- 异常二:
Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly
环境变量没有设置对,设置HIVE_CONF_DIR
在conf/sqoop-env.sh
(确保HADOOP_HOME
和HIVE_HOME
不是空值)
export HADOOP_CLASSPATH="`$HADOOP_HOME/bin/hadoop classpath`:$HIVE_HOME/lib/*"
- 异常三:
Error when removing metric from org.apache.kafka.common.metrics.JmxReporter java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
根据stackoverflow 解决
- 异常四:
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readerFor
Hive包版本和Sqoop包版本冲突(我的Hive版本是2.3.4),可以先备份Sqoop
的lib,文件再进行下面操作:
cp -r lib lib_back
rm lib/jackson-*
cp $HIVE_HOME/lib/jackson-* lib/
- 异常五:
Connection to node -1 could not be established
你在conf/atlas-application.properties
没有修改atlas.notification.embedded
成false,那么你必须配置好kafka
地址
atlas.kafka.zookeeper.connect=localhost:2181
atlas.kafka.bootstrap.servers=localhost:9092
PS:每次出现异常,你必须先删掉Hadoop上面的文件,再执行导入,你可以直接安装我的流程进行修复,因为这些都是我在配置的时候顺序出现的问题,走到这里我们就配置好了Sqoop
和Hive
的导入Hook,如果运行成功,你会看到下面界面
接下来我们配置Hive钩子来导入Hive中的表
Hive 钩子 #
- 配置hive-site.xml
在里面加入
<property>
<name>hive.exec.post.hooks</name>
<value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
- 解压 hive-hook包
如:tar xzvf apache-atlas-2.0.0-hive-hook.tar.gz
- 复制到atlas中
如:cp -r ../../apache-atlas-2.0.0-hive-hook/apache-atlas-hive-hook-2.0.0/hook/hive hook/
- 配置Hive环境变量
在hive-env.sh
中加入'export HIVE_AUX_JARS_PATH=<atlas package>/hook/hiv
- 给创建软链接
像前面一样创建一个atlas-application.properties
软链接到hive/conf
目录下
如:ln -s /home/zhanglun/github/apache-atlas-sources-2.0.0/distro/target/apache-atlas-2.0.0-server/apache-atlas-2.0.0/conf/atlas-application.properties /opt/apache-hive-2.3.4-bin/conf
- 复制Hive包到Hook
import-hive.sh
依赖Hive
的jackson
一些包(报java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.util.BeanUtil.okNameForGetter
错误),把Hive的依赖包复制到钩子的包目录下面
如:cp $HIVE_HOME/lib/jackson-* ../hook/hive/atlas-hive-plugin-impl/
现在我们尝试执行hook-bin/import-hive.sh
(在apache-atlas-2.0.0-hive-hook/apache-atlas-hive-hook-2.0.0
目录下)
现在Atlas里面有两张表,不过一张是Sqoop导入的,一张是Hive导入的,查看Hive导入的血缘关系时候我们发现,他只有自己的一张表(源表)
其他Kafka和Storm的钩子比较简单我就不介绍详细过程了