Contents
  1. 1. Server安装
  2. 2. Hook安装
    1. 2.1. Sqoop钩子
    2. 2.2. Hive 钩子

Atlas 是一个可扩展和可扩展的核心基础治理服务集 - 使企业能够有效地和高效地满足 Hadoop 中的合规性要求,并允许与整个企业数据生态系统的集成。[来自百科]

架构图-来源网络

现在我们就基于最新版2.0.0介绍一下部署细节

Server安装

  1. 源码安装

首先在https://www.apache.org/dyn/closer.cgi/atlas/2.0.0/apache-atlas-2.0.0-sources.tar.gz下载2.0.0源码

解压源码

  1. 选择Atlas架构

Atlas支持多种架构作为后端

  • HBase + Solr
  • Cassandra + Solr

你可以选择多种,这里我们采用集成HBase + Solr方式编译

mvn clean -DskipTests package -Pdist,embedded-hbase-solr

执行代码即可(推荐使用阿里云的maven源加速编译)

  1. 修改环境变量

编译完之后在/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

我们设定SolrHBase手动开启,方便我们发现哪个部分启动异常

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应该能看到HMasterHRegionServer启动了

测试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/targetapache-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.jarSqoop文件夹

    • 异常二: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_DIRconf/sqoop-env.sh(确保HADOOP_HOMEHIVE_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上面的文件,再执行导入,你可以直接安装我的流程进行修复,因为这些都是我在配置的时候顺序出现的问题,走到这里我们就配置好了SqoopHive的导入Hook,如果运行成功,你会看到下面界面

Sqoop导入Hive血缘关系

接下来我们配置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依赖Hivejackson一些包(报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目录下)

hive导入的表

现在Atlas里面有两张表,不过一张是Sqoop导入的,一张是Hive导入的,查看Hive导入的血缘关系时候我们发现,他只有自己的一张表(源表)

其他Kafka和Storm的钩子比较简单我就不介绍详细过程了

Contents
  1. 1. Server安装
  2. 2. Hook安装
    1. 2.1. Sqoop钩子
    2. 2.2. Hive 钩子