Atlas Hook
Atlas 提供了关于 Hive、HBase、Kafka、Sqoop、Storm 和 Falcon 等组件的 Hook。
在安装包中已经含有 hook 和 hook-bin,不需要像官网所说,需要解压相关hook包,然后拷贝到安装目录。
Hive Hook
分批量导入 和 hook 实时跟踪
批量导入 hive 元数据
import_hive.sh 脚本在 安装包的 bin 目录下。所以还是需要将编译后的 hook 包进行解压,拷贝此脚本。
直接执行会报错,少依赖包。如下三个,下载后放到 $ATLAS_HOME/hook/hive/atlas-hive-plugin-impl/ 下。
之后再执行,执行日志位于 $ATLAS_HOME/logs/import_hive.log
hook 跟踪
atlas 提供了对应的 hive atlas hook 来进行跟踪 hive cli 里面的操作来进行元数据的更新。配置 hook 步骤如下:
在 hive-env.sh 里面增加如下内容:即添加 hive hook 的目录。
1
export HIVE_AUX_JARS_PATH=/data/atlas/apache-atlas-2.0.0/hook/hive
在 hive-site.xml 内增加配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<property>
<name>atlas.cluster.name</name>
<value>primary</value>
</property>
<property>
<name>atlas.hook.hive.maxThreads</name>
<value>1</value>
</property>
<property>
<name>atlas.hook.hive.minThreads</name>
<value>1</value>
</property>
<property>
<name>atlas.rest.address</name>
<value>http://tmaster:21000</value>
</property>
# 必要配置,上面四项可不配。
<property>
<name>hive.exec.post.hooks</name>
<value>org.apache.atlas.hive.hook.HiveHook</value>
</property>修改 atlas 配置文件 atlas-application.properties。如果不修改value,那么可以不增加这些配置
1
2
3
4
5
6
7
8
9
10
11# hive hook 相关
atlas.hook.hive.synchronous=false # whether to run the hook synchronously. false recommended to avoid delays in Hive query completion. Default: false
atlas.hook.hive.numRetries=3 # number of retries for notification failure. Default: 3
atlas.hook.hive.queueSize=10000 # queue size for the threadpool. Default: 10000
atlas.cluster.name=primary # clusterName to use in qualifiedName of entities. Default: primary
# kafka 相关,所有的kafka相关配置加上 atlas.kafka. 前缀即可生效。
atlas.kafka.zookeeper.connect= # Zookeeper connect URL for Kafka. Example: localhost:2181
atlas.kafka.zookeeper.connection.timeout.ms=30000 # Zookeeper connection timeout. Default: 30000
atlas.kafka.zookeeper.session.timeout.ms=60000 # Zookeeper session timeout. Default: 60000
atlas.kafka.zookeeper.sync.time.ms=20 # Zookeeper sync time. Default: 20将 atlas-application.properties 拷贝到 hive conf 目录下,或者直接做个软链接
其他hive节点配置,需要
atlas-application.properties
和export HIVE_AUX_JARS_PATH=/data/atlas/apache-atlas-2.0.0/hook/hive
Kafka Hook
将编译后的安装包中的 apache-atlas-2.0.0-kafka-hook 中的 jar 包 目录拷贝到 atlas 安装包的 $ATLAS_HOME/hook/kafka/ 下。
然后 将 atlas 配置文件 打包到 $ATLAS_HOME//hook/kafka/atlas-kafka-plugin-impl/kafka-bridge-2.0.0.jar
1 | 在 atlas-kafka-plugin-impl 目录下打包 |
将准备好的 hook 和 hook-bin分发到 Kafka 节点
hook-bin 下执行 import-kafka.sh
注意点:
- kafka 版本会有影响,有个 zkUtils 的包,有个方法一直找不到。换个版本就好了,目测是低版本kafka 集群少了未知的包,
- atlas 只会读取与 atlas 集成的 kafka 的 topic 。需要在导入kafka-bridge 包同级目录下增加 atlas-application.properties ,atlas.cluster.name 和 atlas.kafka.zookeeper.connect 两项分别确定 集群名和 目标kafka地址。导入时修改的这两个配置不会影响 atlas 集群中的参数。
HBase Hook
提前下载缺失的包:https://mvnrepository.com/artifact/org.apache.htrace/htrace-core4/4.2.0-incubating
HBase-site.xml 增加配置
1 | <property> |
atlas 配置文件 atlas-application.properties 拷贝到HBase 所有节点的 config 目录。
批量导入时,需要增加上面下载的 jar 包 到hook 下的目录下。
把所有 atlas 下 HBase hook 相关的 jar 包 软链接 到 HBase 下的 lib 目录下。
HBase 版本问题还未解决。
针对于 要求不同 hive 不同 HBase 导入时所对应的 qualifiedName 中 default.testhive@testHive 的 testHive 不一样。需要将不同hive 、HBase 集群 中的 atlas-application.properties 中的 atlas.cluster.name。hive不需要重启。HBase需要重启。切记,同一个集群的,要保持配置一样。
Spark-Atlas-Connector
git下载源码:https://github.com/hortonworks-spark/spark-atlas-connector/archive/master.zip
编译:
1 | mvn clean |
创建 atlas 中 spark 相关模块:
拷贝 patch/1100-spark_model.json
到 $ATLAS_HOME/models/1000-Hadoop/
下,然后重启 atlas 服务使之生效。
将 配置 文件 atlas-application.properties 拷贝到 spark conf 下,同时 spark 需要能连接上hive hadoop等。
启动 spark SQL 或者 spark shell 时,带上连接器的 jar 包。
1 | bin/spark-sql --jars spark-atlas-connector-assembly-0.1.0-SNAPSHOT.jar --conf spark.extraListeners=com.hortonworks.spark.atlas.SparkAtlasEventTracker --conf spark.sql.queryExecutionListeners=com.hortonworks.spark.atlas.SparkAtlasEventTracker --conf spark.sql.streaming.streamingQueryListeners=com.hortonworks.spark.atlas.SparkAtlasStreamingQueryEventTracker |
此连接器,只能实现 insert 相关操作,并且生成的 atlas entities 是 spark process,而不是 hive process。所以几乎对追踪 hive 元数据没作用。
所有就有接下来的转换思路,不用spark-sql,而是转为 使用 hive on spark。
Hive on Spark
hive on spark 与 spark-sql 操作过程正好相反。spark-sql 是在spark 中连接hive元数据,然后进行计算。而 hive on spark 是,hive 底层执行引擎由 MR 修改为 Spark。
版本依赖:
Hive Version | Spark Version |
---|---|
master | 2.3.0 |
3.0.x | 2.3.0 |
2.3.x | 2.0.0 |
2.2.x | 1.6.0 |
2.1.x | 1.6.0 |
2.0.x | 1.5.0 |
1.2.x | 1.3.1 |
1.1.x | 1.2.0 |
spark-sql 监听器实现
原理:通过listener监听到spark-sql中的每一个sql,然后将sql放入到hive session中进行解析,然后引用atlas的hive hook包 进行 sql 关系的注入,drop 操作除外。
(无法实现drop操作是因为,在spark-sql中,执行drop 后,hive metastore 中已经不存在需要drop的数据,当 hive session进行解析时会发现不存在,无法进行解析。)
代码打包:(不同的hive环境需要替换掉jar包中的hive-site.xml)
atlas-bridges-1.0-SNAPSHOT.jar
atlas-bridges-1.0-SNAPSHOT-jar-with-dependencies.jar
。
使用方法:将jar包放到 $SPARK_HOME/jars 目录下。
对于
atlas-bridges-1.0-SNAPSHOT.jar
,还需要在jars目录下创建 atlas-hive-hook 的相关包 的软链接对于
atlas-bridges-1.0-SNAPSHOT-jar-with-dependencies.jar
,只需要放入其包。然后在启动spark-sql时,加上监听器参数
1
2
3bin/spark-sql --jars atlas-bridges-1.0-SNAPSHOT.jar --conf spark.extraListeners=com.eebbk.atlas.bridges.sparksql.AtlasMetadataListener
bin/spark-sql --conf spark.extraListeners=com.eebbk.atlas.bridges.sparksql.AtlasMetadataListener
listener:
1 | package com.eebbk.atlas.bridges.sparksql; |
sqlLineage:
1 | package com.eebbk.atlas.bridges.sparksql; |