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 的部署,网上相关的教程有很多,感兴趣的朋友可以自己搜索尝试。
核心组件概念
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
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
问题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
8.集成hive
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/
不拷贝报的话会报错
五、执行同步Hive 元数据脚本
sh import-hive.sh