app开发者平台在数字化时代的重要性与发展趋势解析
1398
2022-10-07
atlas 初体验
介绍
最近由于内部需要做 spark sql 的字段血缘关系,碰巧看到 github 有人提供了 spark 的 atlas 插件,准备调研一下看能否满足需求。 介绍:Atlas 是 Hadoop 的数据治理和元数据框架。 Atlas是一组可扩展和可扩展的核心基础治理服务,使企业能够有效,高效地满足 Hadoop 中的合规性要求,并允许与整个企业数据生态系统集成。 Apache Atlas为组织提供了开放的元数据管理和治理功能,以建立其数据资产的目录,对这些资产进行分类和治理,并为数据科学家,分析师和数据治理团队提供围绕这些数据资产的协作功能。
Github地址
官网地址
废话不多说,开始
-和安装
在 Github 上提供了0.x,1.x,2.x 版本,其中 2.x 版本需要 hive 3.0 以上才能支持,否则安装 hive hook 时会出现异常
2020-08-27T06:11:21,978 ERROR [3cf21166-5613-4313-a607-d6b77d305de3 main] hook.HiveHook: HiveHook.run(): failed to proceoperation QUERYjava.lang.NoSuchMethodError: org.apache.hadoop.hive.metastore.api.Database.getCatalogName()Ljava/lang/String;
由于官网没有提示 atlas 版本和 hive 版本的对应,所以大家需要根据自己的 hive 版本选择合适的 atlas 版本,查看我们的 hive 版本为 2.3.5,所以直接- 1.x 版本即可
[hadoop@172 ~]$ hive --versionHive 2.3.5Git git://compile73/cdisk/App/emr_release/hive -r 76595628ae13b95162e77bba365fe4d2c60b3f29Compiled by root on Fri Feb 21 11:32:28 CST 2020From source
一、-atlas-release-1.2.0-rc3.tar.gz 后上传到gateway机器
二、tar -zxvf 解压 atlas-release-1.2.0-rc3.tar.gz
三、 进入解压后的目录atlas-release-1.2.0-rc3
四、打包 由于 atlas 需要依赖 hbase+solr,并且我们目前是为了调研测试,无需搭建 hbase 和 solr 集群,直接执行 mvn clean -DskipTests package -Pdist ,该命令会在打包时内嵌 hbase+solr 此打包过程会持续十几个小时(需要- hbse、solr 等很多资源包,下的很慢),要耐心等待,我更建议使用 nohup mvn clean -DskipTests package -Pdist >exe.log & 来后台执行。 最好不要在本地有 vpn 的机器上打包,然后上传到远程机器,否则你要修改很多配置,因为一些默认配置在打包的时候生成,使用的是你打包时候的路径。
五、打包完成后进入 atlas-release-1.2.0-rc3/distro/target
六、在该目录下使用 tar -zxvf 解压 apache-atlas-1.2.0-server.tar.gz ,解压后的目录为 apache-atlas-1.2.0
七、进入 /data/atlas/atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0目录
八、然后执行 bin 目录的 atlas_start.py 脚本启动 atlas 默认端口是 21000
执行过程中需要看日志可以进入 logs 查看 atlas 的启动日志,hbase/logs 查看 hbase 的启动日志,有时候 hbase 可能启动有问题
测试
进入 端口,进入登陆界面,表示安装部署完成。默认账号密码:admin/admin
hive sql 解析支持
添加 hive hook
一、进入 ${HIVE-HOME}/conf 在 hive-site.xml 中添加 atlas 的 hive 钩子
二、在打包成功后的 atlas-release-1.2.0-rc3/distro/target 目录解压 apache-atlas-1.2.0-hive-hook.tar.gz 压缩包
三、解压后目录为 atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0-hive-hook/apache-atlas-hive-hook-1.2.0/
三、在 ${HIVE-HOME}/conf 目录中对 hive-env.sh 文件增加 export HIVE_AUX_JARS_PATH=atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0-hive-hook/apache-atlas-hive-hook-1.2.0/hook/hive 配置 四、复制 atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0/conf/atlas-application.properties 文件到 ${HIVE-HOME}/conf 目录
导入hive元数据
在 atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0-hive-hook/apache-atlas-hive-hook-1.2.0/hook-bin 目录有 import-hive.sh 脚本
直接通过 sh import-hive.sh 执行该脚本导入 hive 元数据,执行过程中会提示输入 atlas 的账号密码,默认为: admin/admin
启动过程中可能会报错,比如我遇见了
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/jaxrs/json/JacksonJaxbJsonProvider
初步判断为 jackson 的 jar 冲突了,查看 import-hive.sh 脚本,发现会加载hook/hive/atlas-hive-plugin-impl 的 jar
hive 的 jar 与 atlas-hive-plugin-impl 的 jar 里面都包含 jackson 的相关 jar,于是我使用 rm jackson-* 删除了atlas-hive-plugin-impl 的相关jar解决了该冲突问题
导入 hive 元数据后可以登陆 atlas 界面查看相关元数据信息
并且表的建表血缘也已经导入
字段的信息也已经录入
测试hive hook
简单执行一个hera资源统计的hive脚本
use sucx_test; -- 昨日升级设备数create table if not exists qs_tzl_ProductTag_result(pid string,category string,category_code string,tag_name string,tag_value string,other string,update_time string)partitioned by (tag_id string)STORED AS PARQUET TBLPROPERTIES('parquet.compression'='SNAPPY'); insert overwrite table qs_tzl_ProductTag_result partition(tag_id='3014')select T1.product_id as pid ,T2.category ,cast(from_unixtime(unix_timestamp()) as string) as update_timefrom (select product_id from COM_PRODUCT_UPGRADE_STAT_D where p_day='20200901' ) T1left join (select category from bi_ods.ods_smart_product where dt='20200901' ) T2on T1.product_id=T2.id;
执行后查看 qs_tzl_ProductTag_result 的表级血缘为
pid 的字段血缘为
spark sql解析支持
安装
atlas 官方文档中并不支持 spark sql 的解析,在 github 中找到了一个支持spark 解析的插件 地址: 一、git clone 后本地进行打包
mvn package -DskipTests
二、打包后在 spark-atlas-connector/spark-atlas-connector-assembly/target 目录有一个 spark-atlas-connector-assembly-${version}.jar 的 jar,将该 jar 上传到服务器。 需要注意的是不要上传 spark-atlas-connector/spark-atlas-connector/target 这个目录内的 jar ,缺少相关依赖包
三、将 spark-atlas-connector-assembly-${version}.jar 放到一个固定目录 比如/opt/resource
四、在 spark-atlas-connector/patch 目录,有一个 1100-spark_model.json 的文件,将该文件先上传到服务器
五、将 1100-spark_model.json 放到 atlas-release-1.2.0-rc3/distro/target/apache-atlas-1.2.0/models/1000-Hadoop 目录
六、重启 atlas
测试spark hook
首先进入spark-sql client
spark-sql --master yarn \--jars /opt/resource/spark-atlas-connector_2.11-0.1.0-SNAPSHOT.jar \--files /opt/resource/atlas-application.properties \--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
执行 hera 的一个资源统计任务
CREATE EXTERNAL TABLE IF NOT EXISTS sucx_hera.ads_hera_task_mem_top_10( `job_id` BIGINT COMMENT '任务ID', `user` STRING COMMENT '关注人', `applicationId` STRING COMMENT 'yarn执行的app id', `memorySeconds` BIGINT COMMENT '内存使用时间和', `startedTime` BIGINT COMMENT '开始时间', `finishedTime` BIGINT COMMENT '结束时间', `elapsedTime` BIGINT COMMENT '运行时间', `vcoreSeconds` BIGINT COMMENT 'vcore使用时间和') ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'WITH SERDEPROPERTIES ( 'field.delim'='\t', 'serialization.format'='\t')STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'LOCATION 'cosn://sucx-big-data/bi//sucx_hera/ads_hera_task_mem_top_10'; insert overwrite table sucx_hera.ads_hera_task_mem_top_10 select job_id,user,applicationId,memorySeconds,startedTime,finishedTime,elapsedTime,vcoreSecondsfrom(SELECT top.job_id, row_number() over(distribute by top.applicationId ORDER BY sso.id) as num, case when sso.name is null then operator else sso.name end as user, top.applicationId, top.memorySeconds, top.startedTime, top.finishedTime, top.elapsedTime, top.vcoreSeconds FROM (select * from sucx_hera.dws_hera_task_mem_top_10 where dt = '20200901' ) top left join bi_ods.ods_hera_job_monitor monitor on monitor.dt='20200901' and top.job_id=monitor.job_id left join bi_ods.ods_hera_sso sso on sso.dt='20200901' and find_in_set(sso.id,monitor.user_ids) >0 order by job_id ) temp where temp.num = 1
执行后,查看 ads_hera_task_mem_top_10 表级血缘
查看 ads_hera_task_mem_top_10 字段血缘,找不到
查看 github issue,在 发现作者强制关闭了 spark 字段的支持,并删除了相关代码 has been headache and troublesome to keep the logic to support table column but having flag to disable it. Even we have dirty workaround to remove column attribute from created entities, which incurred a bug I had to fix. We don’t have any chance to turn it on, and once we support column entities I think it should be supported as default and shouldn’t be able to turn it off. This patch proposes to discard the logic to supporting table column entities at all.
由于只有作者一个人维护,字段功能被废弃了。
结论
对于 hive sql 任务,我们可以完美的通过 atlas 的 hive hook 来实现表、以及字段的血缘,而对于 spark sql 任务,使用 spark-atlas-connector 只能实现表级别的血缘,目前字段的血缘还没发现开源的产品,难道又要自己开发了么。。。
关注我,随时获取最新文章哦
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~