atlas总结
2022-06-22 12:49:19 2 举报
AI智能生成
元数据管理框架atlas
作者其他创作
大纲/内容
官网文档 http://atlas.apache.org/2.1.0/index.html#/Atlas开发指南(中文版)https://mantoudev.com/mantouBook/Atlas_cn/
https://www.cnblogs.com/mantoudev/p/9986408.html
简介
https://www.cnblogs.com/mantoudev/p/9965869.html
Atlas的术语表(Glossary)
webapp/src/main/java/org/apache/atlas/web/rest/GlossaryREST.java
atlas-webapp中与术语相关的操作API
https://www.cnblogs.com/mantoudev/p/9985600.html
https://cloud.tencent.com/developer/article/1503998
Atlas的元数据模型Type System
Atlas允许用户为他们想要管理的元数据对象定义模型。
该模型由称为type(类型)的定义组成。称为entities(实体)的type(类型)实例表示受管理的实际元数据对象。
Type System是一个允许用户定义和管理类型和实体的组件。开箱即用的Atlas管理的所有元数据对象(例如Hive表)都使用类型建模并表示为实体。
要在Atlas中存储新类型的元数据,需要了解类型系统组件的概念。
atlas数据模型(重点理解,后面会自定义)
Atlas使用JanusGraph存储和管理元数据。默认情况下,Atlas使用独立的HBase实例作为JanusGraph的底层存储。Atlas通过JanusGraph索引元数据以支持全文搜索查询。为了给索引存储提供HA,我们建议将Atlas配置为使用Solr或Elasticsearch作为JanusGraph的索引存储支撑图数据库引擎JanusGraph图存储后端-hbase/cassandra图索引后端-solr/elasticsearch
https://www.cnblogs.com/wang3680/p/13968277.html
源代码模块结构分析
https://cloud.tencent.com/developer/article/1764110
Atlas 2.1.0 实践(1)—— 编译Atlas
https://cloud.tencent.com/developer/article/1768539?from=article.detail.1764110
Atlas 2.1.0 实践(2)—— 安装Atlas
https://blog.csdn.net/xueyao0201/article/details/94310199
Apache Atlas 1.2.0 部署手册(基于集群已有组件HBase和ElasticSearch,不使用内嵌的HBase和Solr)
https://cloud.tencent.com/developer/article/1781542
Atlas 2.1.0 实践(3)—— Atlas集成HIve
https://cloud.tencent.com/developer/article/1785134
Atlas 2.1.0 实践(4)—— 权限控制
别人的实践记录
atlas元数据和索引存储
深入剖析
概述
主要有以下几个概念:Type类型Entity 实体Attributes属性
源码分析
addons/hive-bridge/src/main/java/org/apache/atlas/hive/model/HiveDataTypes.javaaddons/models/1000-Hadoop/1030-hive_model.jsondocs/src/documents/Hook/HookHive.md
Hive
addons/kafka-bridge/src/main/java/org/apache/atlas/kafka/model/KafkaDataTypes.javaaddons/models/1000-Hadoop/1070-kafka_model.jsondocs/src/documents/Hook/HookKafka.md
Kafka
addons/sqoop-bridge/src/main/java/org/apache/atlas/sqoop/model/SqoopDataTypes.javaaddons/models/1000-Hadoop/1040-sqoop_model.jsondocs/src/documents/Hook/HookSqoop.md
Sqoop
示例分析
https://atlas.apache.org/2.1.0/index.html#/TypeSystemhttps://www.cnblogs.com/163yun/p/9015985.htmlhttps://www.cnblogs.com/mantoudev/p/9985600.htmlhttps://blog.csdn.net/rlnLo2pNEfx9c/article/details/106846113
如何自定义扩展模型
元模型
(1)展示如何以离线方式创建自定义的元数据,包括类型系统和具体实体(2)展示如何查询元数据实体及血缘关系
本示例最主要目的
python bin/quick_start.py
执行入口
distro/src/bin/quick_start.py
python源码
webapp/src/main/java/org/apache/atlas/examples/QuickStartV2.java 主要是构建元数据,然后通过REST接口发送给Atlas服务器
REST地址: ######### Server Properties ######### atlas.rest.address=http://localhost:21000 java客户端工具类: client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java
java主类
// Shows how to create v2 types in Atlas for your meta model quickStartV2.createTypes(); 其中核心逻辑: AtlasTypesDef atlasTypesDef = createTypeDefinitions(); atlasClientV2.createAtlasTypeDefs(atlasTypesDef);
创建类型系统
// Shows how to create v2 entities (instances) for the added types in Atlas quickStartV2.createEntities(); 其中核心逻辑: 构建各种Type的实例AtlasEntity intg/src/main/java/org/apache/atlas/model/instance/AtlasEntity.java 然后调用AtlasClientV2发送请求 EntityMutationResponse response = atlasClientV2.createEntity(entityWithExtInfo);
创建类型系统的各种实体
展示 DSL Queries
展示如何查询实体的血缘关系
主要逻辑分析
元数据集成之离线导入demo数据
将atlas-application.property copy至hive客户端的conf目录
我自己编译atlas项目之后的路径如下D:\\workspace\\idea\\atlas\\distro\\target\\apache-atlas-2.1.0-hive-hook\\apache-atlas-hive-hook-2.1.0
将atlas项目编译之后的hive hook相关文件夹拷贝到hive客户端
<property> <name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook</value> </property> <property> <name>hive.metastore.event.listeners</name> <value>org.apache.atlas.hive.hook.HiveMetastoreHook</value> </property>
修改hive-site.xml 配置
export HIVE_AUX_JARS_PATH=/usr/local/hive/hook/hive
增加jar包环境,修改hive-env.sh
atlas集成hive配置
[root@hadoop01 ~]# which hive/usr/local/hive/bin/hive
[root@hadoop01 ~]# cd /usr/local/hive/[root@hadoop01 hive]# pwd/usr/local/hive
[root@hadoop01 hive]# ll总用量 11044drwxr-xr-x 3 root root 179 8月 6 13:55 bindrwxr-xr-x 2 root root 4096 9月 2 20:35 confdrwxr-xr-x 4 root root 34 3月 24 16:10 examplesdrwxr-xr-x 7 root root 68 3月 24 16:10 hcatalogdrwxr-xr-x 3 root root 18 9月 3 09:59 hookdrwxr-xr-x 2 root root 28 9月 3 09:59 hook-bin-rw-r--r-- 1 root root 2040 9月 3 10:04 hook-bin.zip-rw-r--r-- 1 root root 11251678 9月 3 10:04 hook.zip
[root@hadoop01 hive]# ll hook-bin总用量 8-rw-r--r-- 1 root root 4246 8月 19 10:38 import-hive.sh
[root@hadoop01 hive]# ll hook总用量 0drwxr-xr-x 3 root root 112 9月 3 09:59 hive
[root@hadoop01 hive]# ll hook/hive/总用量 36drwxr-xr-x 2 root root 4096 9月 3 09:59 atlas-hive-plugin-impl-rw-r--r-- 1 root root 17506 9月 3 09:58 atlas-plugin-classloader-2.1.0.jar-rw-r--r-- 1 root root 11563 9月 3 09:58 hive-bridge-shim-2.1.0.jar
[root@hadoop01 hive]# ll hook/hive/atlas-hive-plugin-impl/总用量 12260-rw-r--r-- 1 root root 37495 9月 3 09:51 atlas-client-common-2.1.0.jar-rw-r--r-- 1 root root 42189 9月 3 09:51 atlas-client-v1-2.1.0.jar-rw-r--r-- 1 root root 22362 9月 3 09:51 atlas-client-v2-2.1.0.jar-rw-r--r-- 1 root root 79688 9月 3 09:51 atlas-common-2.1.0.jar-rw-r--r-- 1 root root 559518 9月 3 09:51 atlas-intg-2.1.0.jar-rw-r--r-- 1 root root 64144 9月 3 09:51 atlas-notification-2.1.0.jar-rw-r--r-- 1 root root 362679 6月 30 14:04 commons-configuration-1.10.jar-rw-r--r-- 1 root root 96551 9月 3 09:58 hive-bridge-2.1.0.jar-rw-r--r-- 1 root root 66897 7月 29 14:41 jackson-annotations-2.9.9.jar-rw-r--r-- 1 root root 325632 7月 29 14:41 jackson-core-2.9.9.jar-rw-r--r-- 1 root root 1400944 6月 15 21:47 jackson-databind-2.10.0.jar-rw-r--r-- 1 root root 165345 6月 15 22:02 jersey-json-1.19.jar-rw-r--r-- 1 root root 53275 7月 29 14:40 jersey-multipart-1.19.jar-rw-r--r-- 1 root root 45927 7月 29 19:18 jsr311-api-1.1.jar-rw-r--r-- 1 root root 7295202 7月 29 14:40 kafka_2.11-2.0.0.jar-rw-r--r-- 1 root root 1893564 7月 29 14:40 kafka-clients-2.0.0.jar
[root@hadoop01 hive]# cat conf/hive-env.sh | grep -i HIVE_AUX_JARS_PATHexport HIVE_AUX_JARS_PATH=/usr/local/hive/hook/hive
[root@hadoop01 hive]# cat conf/hive-site.xml | grep -C3 -i atlas<property> <name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook</value> </property><property> <name>hive.metastore.event.listeners</name> <value>org.apache.atlas.hive.hook.HiveMetastoreHook</value> </property>
hive客户端环境
hook-bin/import-hive.sh
离线导入hive库表
启动hive客户端
[root@hadoop01 hive]# ps -ef | grep -i hive
hive实时hook之hive driver端
hive实时hook之hive server2服务端
配置好之后,重启metastore服务,可以看到加载了相关配置文件和atlas相关的类
hive实时hook之hive metastoreserver服务端
SQL测试实例
集成hive测试
https://www.cnblogs.com/songchaolin/p/13084252.htm
hive --debug 客户端启动远程debug监听
本地idea进行远程debug连接
hive client远程debug
采集hive相关元数据时需要加入最上层的业务信息,将业务元数据与技术元数据关联起来
需求
<property> <name>hive.exec.post.hooks</name> <value>org.apache.atlas.hive.hook.HiveHook</value> </property>
hive-site.xml 添加的hook配置
addons/hive-bridge-shim/src/main/java/org/apache/atlas/hive/hook/HiveHook.java
atlas项目中源代码入口位置
hive抽象类org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContextatlas具体实现addons/hive-bridge-shim/src/main/java/org/apache/atlas/hive/hook/HiveHook.javaaddons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveHook.java
原理Hive Hook
hive driver客户端端hook的原理
hive server2服务端hook的原理
<property> <name>hive.metastore.event.listeners</name> <value>org.apache.atlas.hive.hook.HiveMetastoreHook</value> </property>
addons/hive-bridge-shim/src/main/java/org/apache/atlas/hive/hook/HiveMetastoreHook.java
hive抽象类org.apache.hadoop.hive.metastore.MetaStoreEventListener atlas具体实现addons/hive-bridge/src/main/java/org/apache/atlas/hive/hook/HiveMetastoreHookImpl.java
原理 Hive Listener
具体实现
hive metestore服务端hook的原理
hive hook二次开发
SAC hook支持的spark版本问题目前只支持spark2.4.x,不支持spark3.x
spark ddl不在spark hook中搜集,需要开启hive metastore hook来采集
存在问题
https://github.com/hortonworks-spark/spark-atlas-connector特别说明: 经过实际测试,SAC只支持spark2.4.x版本,不支持spark3.x版本,java class不兼容
SAC
[root@hadoop03 spark-atlas-connector]# pwd/home/atlas/spark-atlas-connector
[root@hadoop03 spark-atlas-connector]# git status# 位于分支 master无文件要提交,干净的工作区
[root@hadoop03 spark-atlas-connector]# mvn clean[root@hadoop03 spark-atlas-connector]# mvn package -DskipTests忽略test编译时的错误: mvn clean package -Dmaven.test.skip=true ......
[root@hadoop03 spark-atlas-connector]# ll spark-atlas-connector-assembly/target/drwxr-xr-x 2 root root 28 8月 5 18:10 antrundrwxr-xr-x 2 root root 28 8月 5 18:10 maven-archiver-rw-r--r-- 1 root root 2803 8月 5 18:10 original-spark-atlas-connector-assembly-0.1.0-SNAPSHOT.jardrwxr-xr-x 4 root root 41 8月 5 18:10 scala-2.11-rw-r--r-- 1 root root 41679846 8月 5 18:10 spark-atlas-connector-assembly-0.1.0-SNAPSHOT.jardrwxr-xr-x 2 root root 6 8月 5 18:10 tmp
编译SAC
在hadoop04机器,我们已经部署好atlas服务(包括一整套zk+kafka+hbase+es)
atlas服务部署
[root@hadoop01 usr_local]# which java/usr/jdk1.8.0_191/bin/java[root@hadoop01 usr_local]# which hadoop/usr/local/hadoop-3.2.1/bin/hadoop[root@hadoop01 usr_local]# which hive/usr/local/hive/bin/hive[root@hadoop01 usr_local]# which spark/usr/bin/which: no spark in (/usr/local/scala/bin:/usr/local/flink/bin:/usr/local/apache-maven-3.6.1/bin:/usr/jdk1.8.0_191/bin:/usr/jdk1.8.0_191/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/hadoop-3.2.1/bin:/usr/local/hive/bin:/usr/local/spark/bin:/usr/local/hadoop-3.2.1/etc/hadoop:/root/bin)[root@hadoop01 usr_local]# echo $SPARK_HOME/usr/local/spark
基础环境
[root@hadoop01 ~]# ll /home/atlas_files/-rw-r--r-- 1 root root 12332 8月 6 13:41 atlas-application.properties-rw-r--r-- 1 root root 41679846 8月 6 13:41 spark-atlas-connector-assembly-0.1.0-SNAPSHOT.jar
atlas文件准备
[root@hadoop01 usr_local]# pwd/home/usr_local[root@hadoop01 usr_local]# unzip spark-2.4.7.zip [root@hadoop01 spark-2.4.7]# pwd/home/usr_local/spark-2.4.7[root@hadoop01 spark-2.4.7]# cp /usr/local/hive/conf/hive-site.xml ./conf/[root@hadoop01 spark-2.4.7]# ll conf/ | grep -i \"atlas\\|hive\"-rw-r--r-- 1 root root 12332 8月 6 13:35 atlas-application.properties-rw-r--r-- 1 root root 2212 8月 6 13:37 hive-site.xml[root@hadoop01 spark-2.4.7]# cat conf/spark-env.sh | grep -iv \"#\"export JAVA_HOME=/usr/jdk1.8.0_191/export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.2.1/bin/hadoop classpath)export HADOOP_CONF_DIR=/usr/local/hadoop-3.2.1/confexport HIVE_HOME=/usr/local/hive[root@hadoop01 ~]# ln -s /home/usr_local/spark-2.4.7 /usr/local/spark2.4.7[root@hadoop01 ~]# cd /usr/local/spark2.4.7/[root@hadoop01 spark2.4.7]# pwd/usr/local/spark2.4.7-----------已有其他spark环境,我们需要测试自己的版本[root@hadoop01 spark2.4.7]# echo $SPARK_HOME/usr/local/spark[root@hadoop01 spark2.4.7]# export SPARK_HOME=/usr/local/spark2.4.7[root@hadoop01 spark2.4.7]# echo $SPARK_HOME/usr/local/spark2.4.7
spark gateway部署及配置文件准备
-----------不带hook启动spark client[root@hadoop01 spark2.4.7]# bin/spark-shell --master yarn[root@hadoop01 spark2.4.7]# bin/spark-sql --master yarn
-----------带hook启动spark clientbin/spark-sql --master yarn --executor-memory 1G --executor-cores 1 \\--files /home/atlas_files/atlas-application.properties \\--jars /home/atlas_files/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
-----------spark hook忽略掉了spark-sql> create database db_suyc;
-----------spark hook捕获了,并实时发送给atlasspark-sql> create table db_suyc.person33 as select * from db_suyc.person22;
-----------spark hook捕获了,并实时发送给atlasspark-sql> insert into default.demo_01 select * from default.demo_02;
测试
安装spark gateway并测试sac
集成spark2.4.x测试
希望动态化地深入理解atlas的原理源码;
问题
https://my.oschina.net/u/4286379/blog/4329390
atlas不适合部署在win系统上,而个人电脑又恰好是win10,所以本地调试环境不好搭建
解决方案一——本地调试环境
我修改了bin/atlas_start.py文件,只修改了一行代码:#DEFAULT_JVM_OPTS=\"-Dlog4j.configuration=atlas-log4j.xml -Djava.net.preferIPv4Stack=true -server\"DEFAULT_JVM_OPTS=\
atlas服务开启远程debug模式
https://www.cnblogs.com/wy2325/p/5600232.html
需要注意远程主机的IP和PORT要填写正确
然后像本地调试一样设置断点
本地idea进行远程debug
断点插入代码位置:webapp/src/main/java/org/apache/atlas/web/rest触发调试方法:使用postman进行http请求测试
atlas对外暴露的REST接口
断点插入代码位置:webapp/src/main/java/org/apache/atlas/notification/NotificationHookConsumer.javawebapp/src/main/java/org/apache/atlas/notification/preprocessor/HivePreprocessor.java触发调试方法:执行hive sql,触发hive hook推送消息到kafka topic;或执行spark sql,触发spark hook推送消息到kafka topic;
atlas消费ATLAS_HOOK这个kafka topic中hook message的逻辑
hive client远程debughttps://www.cnblogs.com/songchaolin/p/13084252.htmlhive server 2 服务端及beeline client客户端 远程debug方式https://blog.csdn.net/merrily01/article/details/105725414/
hive hook执行逻辑
spark client远程debughttps://blog.csdn.net/asfjgvajfghaklsbf/article/details/109671367
spark hook执行逻辑
关注的调试点
子主题解放方案二——远程debug方式
远程debug
我们可以通过Atlas对外暴露的REST API来与其进行交互,从而实现元数据的增删改查必要时,我们可以对其进行二次开发,来适配我们的需求
背景
源码webapp/src/main/java/org/apache/atlas/web/rest
官方API文档http://atlas.apache.org/api/v2/
swagger文档http://atlas.apache.org/api/v2/ui/index.html#/
其它参考https://www.jianshu.com/p/a37ae460986fhttps://blog.csdn.net/wangpei1949/article/details/87891862https://marcel-jan.eu/datablog/2019/09/03/the-atlas-rest-api-working-examples/
对外REST API
源码client/client-v2/src/main/java/org/apache/atlas/AtlasClientV2.java本质上是对REST API的封装
对外Java API
参考文档
----------------------------AdminREST查看Atlas Metadata Server节点状态 GET /admin/statuscurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/admin/status\"查看Atlas版本和描述 GET /admin/versioncurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/admin/version”
AdminREST
#查询所有Hive库curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/search/basic?typeName=hive_db\"#查询所有Hive表curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/search/basic?typeName=hive_table\" #查询所有Hive表,且包含某一关键字curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/search/basic?typeName=hive_table&query=ads_gmv_sum_day”#查询所有Hive库http://hadoop04:21000/api/atlas/entities?type=hive_db#查询所有Hive表http://hadoop04:21000/api/atlas/entities?type=hive_table
DiscoveryREST
检索所有Type,并返回所有信息 GET /v2/types/typedefscurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/types/typedefs\"检索所有Type,并返回最少信息 GET /v2/types/typedefs/headerscurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/types/typedefs/headers\"
TypesREST
查询某个表的GUIDcurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/search/basic?query=gdyinfo_new&typeName=hive_table\"curl -s -u admin:admin \"http://hadoop04:21000/v2/entity/uniqueAttribute/type/hive_table?attr:qualifiedName=default.demo_02@primary\"批量根据GUID检索Entity GET /v2/entity/bulkcurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/entity/bulk?minExtInfo=yes&guid=2dd4ca4c-9d33-4c19-bca3-f60e162debf2”获取某个Entity定义 GET /v2/entity/guid/{guid}curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/entity/bulk?minExtInfo=yes&guid=2dd4ca4c-9d33-4c19-bca3-f60e162debf2\"获取某个Entity的TAG列表 GET /v2/entity/guid/{guid}/classificationscurl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/entity/guid/2dd4ca4c-9d33-4c19-bca3-f60e162debf2/classifications\"获取一个包含某个attribute(属性)的entity:curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/entities?type={type_name}&property={unique_attribute_name}&value={unique_attribute_value}更新entity的一个attribute属性PUT http://hadoop04:21000/api/atlas/v2/entity/guid/0e822d4c-a578-4b0a-b9e6-085096fbf92f?name=comment\"这是一个测试的表 by suyc\"
EntityREST
查询某个Entity的Lineage GET /v2/lineage/{guid}curl -s -u admin:admin \"http://hadoop04:21000/api/atlas/v2/lineage/2dd4ca4c-9d33-4c19-bca3-f60e162debf2\"
生成血缘数据通过Atlas的RestAPI接口新增Process,可以生成血缘数据。例如将Atlas元数据管理的MySQL数据库表和hive数据表关联生成血缘数据,先查到两张表的guid值,然后构造请求数据调用接口:http://{atlas_host}:21000/api/atlas/v2/entity/bulk请求消息:{ \"entities\":[ { \"typeName\":\"Process\
LineageREST
API总结及测试
创建rdbms_instance、rdbms_db、rdbms_column、rdbms_tablehttps://www.codeleading.com/article/29371584292/请求方式:Post请求路径:http://hadoop04:21000/api/atlas/v2/entity请求验证方式:BaseAuth admin/admin
通过API方式集成RDBMS
REST API总结及测试
atlas
0 条评论
回复 删除
下一页