Apache Atlas 安装部署

  • 1.Atlas 原理及相关概念
  • 2.安装前置条件
  • 3.安装Hbase
  • 4.安装Solr
  • 5.安装kafka
  • 6.编译Atlas
  • 7.安装Atlas
  • 8.集成hive



1.Atlas 原理及相关概念

元数据

元数据其实就是描述数据的数据,比如表,字段,视图等,每个业务系统可能都会自己定义表,字段,视图,这些数据从哪来到往哪去,数据之间是否存在关联,和其他系统的数据是否存在重复和矛盾字段,这些就是元数据管理要解决的问题,也是 Atlas 要解决的问题。

运行原理

Atlas 的原理其实并不难理解,主要是通过内部提供的脚本读取数仓中的数据库结构,生成数据模型,存储到 Atlas的 Hbase 中,同时通过 hook 的方式监听数仓中的数据变化,分析执行的 sql 语句,从而生成表与表,列与列的血缘关系依赖,在前台展示给用户查看。

数仓支持

Atlas 对 Hive 支持最好,我们都知道,Hive 是依赖于 Hadoop 的,数据存储在 HDFS 中,Atlas 有专门的 shell 脚本可以直接运行读取 Hive 的表结构等元数据信息同步到 Atlas 的存储库中,自动生成元数据模型,同时 Atlas 提供的 HiveHook 可以监听 Hive 的数据变化,根据 Hive 执行的 sql 推断出数据与数据之间的关系,生成血缘关系图,如果我们想要分析其他数据存储介质的元数据和血缘关系,Atlas 的支持并不是很理想。但通常情况下,我们会定时把业务库如 mysql,oracle 中的数据定时同步到数仓中整合分析,而数仓我们一般都会采用 Hadoop 的生态体系,所以这一点并不是问题。

架构图解

以下是 Atlas 的架构图解,可以看出,Atlas 所依赖的生态体系是异常庞大的,这也直接导致了它部署起来十分繁琐,本文不再讲解 Atlas 的部署,网上相关的教程有很多,感兴趣的朋友可以自己搜索尝试。

核心组件概念

apache atlas spark数据血缘_atlas

Atlas 中主要有以下核心组件,这些需要我们着重了解,接下来我们通过 Rest Api 自定义建模其实就是对以下组件的增删查改操作。

1.Type

元数据类型定义,这里可以是数据库,表,列等,还可以细分 mysql 表( mysql_table ),oracle 表( oracle_table )等,atlas自带了很多类型,如 DataSet,Process 等,一般情况下,数据相关的类型在定义类型的时候都会继承 DataSet,而流程相关的类型则会继承 Process,便于生成血缘关系。我们也可以通过调用 api 自定义类型。这是一切的起点,定义完类型之后,才能生成不同类型的元数据实体,生成血缘关系,我个人更喜欢把元数据类型称之为建模。

2.Classification

分类,通俗点就是给元数据打标签,分类是可以传递的,比如 A 视图是基于 A 表生成的,那么如果 A 表打上了 a 这个标签,A 视图也会自动打上 a 标签,这样的好处就是便于数据的追踪。

3.Entity

实体,表示具体的元数据,Atlas 管理的对象就是各种 Type 的 Entity。

4.Lineage

数据血缘,表示数据之间的传递关系,通过 Lineage 我们可以清晰的知道数据的从何而来又流向何处,中间经历了哪些操作,这样一旦数据出现问题,可以迅速追溯,定位是哪个环节出现错误。

2.安装前置条件

软件版本:

软件

版本

Hadoop

hadoop-2.6.0-cdh5.16.2

Hbase

hbase-1.2.0-cdh5.16.2

Solr

solr-5.5.1

Kafka

2.2.1

Atlas

apache-atlas-1.1.0

Hadoop和Hbase 采用CDH 版本

Solr 下载地址:https://archive.apache.org/dist/lucene/solr/5.5.1/solr-5.5.1.tgz
Atlas 下载地址:https://atlas.apache.org/#/Downloads

3.安装Hbase

下载地址:http://archive.cloudera.com/cdh5/cdh/5/

安装前提条件:

  • hadoop-2.6.0-cdh5.16.2
  • zookeeper-3.4.5-cdh5.16.2

1.修改 hbase-site.xml 文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
        <!--hbase.rootdir的前端与$HADOOP_HOME/conf/core-site.xml的fs.defaultFS一致 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop01:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

                <!--本地文件系统的临时文件夹。可以修改到一个更为持久的目录上。(/tmp会在重启时清除) -->
        <property>
                <name>hbase.tmp.dir</name>
                <value>/home/hadoop/tmp/hbase</value>
        </property>

                <!--如果只设置单个 Hmaster,那么 hbase.master 属性参数需要设置为 master:60000 (主机名:60000) -->
                <!--如果要设置多个 Hmaster,那么我们只需要提供端口 60000,因为选择真正的 master 的事情会有 zookeeper 去处理 -->
        <property>
                <name>hbase.master</name>
                <value>60000</value>
        </property>

                <!--这个参数用户设置 ZooKeeper 快照的存储位置,默认值为 /tmp,显然在重启的时候会清空。因为笔者的 ZooKeeper 是独立安装的,所以这里路径是指向了 $ZOOKEEPER_HOME/conf/zoo.cfg 中 dataDir 所设定的位置 -->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/home/hadoop/tmp/zookeeper</value>
        </property>

        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoop01</value>
        </property>
                <!--表示客户端连接 ZooKeeper 的端口 -->
        <property>
                <name>hbase.zookeeper.property.clientPort</name>
                <value>2181</value>
        </property>
                <!--ZooKeeper 会话超时。Hbase 把这个值传递改 zk 集群,向它推荐一个会话的最大超时时间 -->
        <property>
                <name>zookeeper.session.timeout</name>
                <value>120000</value>
        </property>

                <!--当 regionserver 遇到 ZooKeeper session expired , regionserver 将选择 restart 而不是 abort -->
        <property>
                <name>hbase.regionserver.restart.on.zk.expire</name>
                <value>true</value>
        </property>

<!-- 以下是phoenix的参数 占时用不到
<property>
        <name>hbase.table.sanity.checks</name>
        <value>false</value>
</property>
<property>
        <name>hbase.regionserver.wal.codec</name>
        <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
        <name>phoenix.schema.isNamespaceMappingEnabled</name>
        <value>true</value>
</property>
<property>
        <name>phoenix.schema.mapSystemTablesToNamespace</name>
        <value>true</value>
</property>

<!--
<property>
        <name>phoenix.query.dateFormatTimeZone</name>
        <value>Asia/Shanghai</value>
</property>
-->


<property>
        <name>hbase.online.schema.update.enable</name>
        <value>true</value>
</property>

<property>
        <name>hbase.coprocessor.abortonerror</name>
        <value>false</value>
</property>
</configuration>

2.修改hbase-env.sh

# The directory where pid files are stored. /tmp by default.
export HBASE_PID_DIR=/home/hadoop/tmp

# 若使用hbase内置的zookeeper 则修改为true
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false

3.修改regionservers

hadoop01

4.启动

bin/start-hbase.sh

5.web界面查看:

http://hadoop01:60010/master-status

apache atlas spark数据血缘_atlas_02

4.安装Solr

1.下载之后解压solr

mkdir /home/hadoop/server
bin/install_solr_service.sh /home/hadoop/software/solr-5.5.1.tgz -s solr -u root -p 8983 -d /home/hadoop/solrdata -i /home/hadoop/server

安装完成以后会自动启动,可以通过浏览器测试 8983 端口访问 Admin UI
另外可以使用 Linux 的服务开关 Solr 服务 service solr restart

访问:http://hadoop01:8983

apache atlas spark数据血缘_hadoop_03


问题1.:web界面创建core失败

1.先去solr-6.5.1/server/solr/ 创建一个名字为new_core的文件夹

2.然后拷贝当前目录下solr-6.5.1/server/configsets/basic_configs下的conf目录拷贝到new_core目录下
即可在web界面成功创建core

同理拷贝 vertex_index 、edge_index、fulltext_index

cp -r configsets/basic_configs/conf ./vertex_index/
cp -r configsets/basic_configs/conf ./edge_index/
cp -r configsets/basic_configs/conf ./fulltext_index/

# 创建atlas所需要的的solr core
./bin/solr create -c vertex_index -d /home/hadoop/app/solr-5.5.1/server/solr/vertex_index -shards 2 -replicationFactor 2  -force

./bin/solr create -c edge_index -d /home/hadoop/app/solr-5.5.1/server/solr/edge_index -shards 2 -replicationFactor 2  -force

./bin/solr create -c fulltext_index -d /home/hadoop/app/solr-5.5.1/server/solr/fulltext_index -shards 2 -replicationFactor 2  -force

删除可以通过命令行:

./bin/solr delete -c vertex_index

重要:启动solr 一定要使用命令行指定的方式 否则报错& 需手动执行下面命令:

Failed to obtain graph instance, retrying 3 times, error: java.lang.IllegalArgumentException: Could not instantiate implement。。。。

./bin/solr start -c -z hadoop01:2181 -p 8983

5.安装kafka

kafka 版本:apache kafka_2.11-2.2.1

vi /home/hadoop/app/kafka_2.11-2.2.1/config/server.properties

#broker.id=0
#log.dirs=/tmp/kafka-logs

broker.id=0
host.name=hadoop
port=9090
log.dirs=/home/hadoop/app/kafka_2.11-2.2.1/logs
zookeeper.connect=hadoop01:2181/kafka

6.编译Atlas

1.下载源码解压
2.配置pom 和maven 的mirrors
配置源码包的 pom.xml

<repository>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<repository>
    <id>oracleReleases</id>
    <name>Oracle Released Java Packages</name>
    <url>http://download.oracle.com/maven</url>
    <layout>default</layout>
</repository>

配置maven 的 settings.xml

<mirror> 
      <id>alimaven</id> 
      <name>aliyun maven</name> 
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> 
      <mirrorOf>central</mirrorOf> 
</mirror>

编译命令:

# 内嵌方式打包
mvn clean -DskipTests package -Pdist,embedded-hbase-solr

# 使用外部的hbase和solr
mvn clean -DskipTests package -Pdist

编译成功之后拿到distro/target 下面的包部署即可
apache-atlas-1.1.0-server.tar.gz

7.安装Atlas

1.配置atlas-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_231/

# indicates whether or not a local instance of HBase should be started for Atlas
export MANAGE_LOCAL_HBASE=false

# indicates whether or not a local instance of Solr should be started for Atlas
export MANAGE_LOCAL_SOLR=false

# indicates whether or not cassandra is the embedded backend for Atlas
export MANAGE_EMBEDDED_CASSANDRA=false

# indicates whether or not a local instance of Elasticsearch should be started for Atlas
export MANAGE_LOCAL_ELASTICSEARCH=false

2.编辑:atlas-application.properties

atlas.graph.storage.backend=hbase
atlas.graph.storage.hbase.table=apache_atlas_janus

#Hbase
#For standalone mode , specify localhost
#for distributed mode, specify zookeeper quorum here
atlas.graph.storage.hostname=localhost
atlas.graph.storage.hbase.regions-per-server=1
atlas.graph.storage.lock.wait-time=10000
# Graph Search Index
atlas.graph.index.search.backend=solr

#Solr
#Solr cloud mode properties
atlas.graph.index.search.solr.mode=cloud
atlas.graph.index.search.solr.zookeeper-url=localhost:2181
atlas.graph.index.search.solr.zookeeper-connect-timeout=60000
atlas.graph.index.search.solr.zookeeper-session-timeout=60000
atlas.graph.index.search.solr.wait-searcher=true

#Solr http mode properties
#atlas.graph.index.search.solr.mode=http
atlas.graph.index.search.solr.http-urls=http://localhost:8983/solr

# Solr-specific configuration property
atlas.graph.index.search.max-result-set-size=150

此处不做过多的集成hive kafaka 的赘述

3.配置好之后启动atls,监控日志看是否报错

bin/atlas_start.py

4.启动成功之后访问21000端口
用户名:admin
密码:admin

apache atlas spark数据血缘_solr_04

8.集成hive

apache atlas spark数据血缘_数据_05

1.配置hive-site.xml

<!-- 配置hook 钩子类 -->
<property>
    <name>hive.exec.post.hooks</name>
    <value>org.apache.atlas.hive.hook.HiveHook</value>
</property>

2.配置hive-env.sh

[root@hadoop01 conf]# cp hive-env.sh.template hive-env.sh
[root@hadoop01 conf]# vim hive-env.sh
export HIVE_AUX_JARS_PATH=$ATLAS_HOME/hook/hive/

atlas.hook.hive.synchronous=false
atlas.hook.hive.numRetries=3
atlas.hook.hive.queueSize=10000

3.复制$ATLAS_HOME/conf/atlas-application.properties文件到$HIVE_HOME/conf下,并追加内容

#复制atlas-application.properties文件到$HIVE_HOME/conf下
 cp atlas-application.properties $HVIE_HOME/conf/

4.复制导入Hive元数据必须的jar包

cp $ATLAS_HOME/server/webapp/atlas/WEB-INF/lib/jackson-jaxrs-base-2.9.9.jar $ATLAS_HOME/hook/hive/atlas-hive-plugin-impl/
cp $ATLAS_HOME/server/webapp/atlas/WEB-INF/lib/jackson-jaxrs-json-provider-2.9.9.jar $ATLAS_HOME/hook/hive/atlas-hive-plugin-impl/
cp $ATLAS_HOME/server/webapp/atlas/WEB-INF/lib/jackson-module-jaxb-annotations-2.9.9.jar $ATLAS_HOME/hook/hive/atlas-hive-plugin-impl/

或者自行下载jar 包到$ATLAS_HOME/hook/hive/atlas-hive-plugin-impl/

不拷贝报的话会报错

apache atlas spark数据血缘_数据_06

五、执行同步Hive 元数据脚本

sh import-hive.sh