hdp对应hadoop的版本_使用HDP或CDP的Atlas采集CDH6的元数据和血缘

作者:谢敏灵

Atlas元数据采集框架

5667564c3877a308348b89ebf2b9f44b.png

目的

基于以上框架,使用HDP或CDP的Atlas采集CDH6的元数据和血缘,理论上只需要将相应的Atlas Hook正确部署到CDH6对应的服务上即可。本文以采集Hive元数据和血缘为例,描述如何部署Atlas Hive Hook到CDH6上。

验证环境

  • HDP 3.1.5集群。组件版本:Atlas 2.0.0.3.1.5.0-152,Hadoop 3.1.1, Hive 3.1.0,HBase 2.0.2,Infra Solr 0.1.0
  • CDP 7.1.2集群。组件版本:Atlas 2.0.0.7.1.2.0-96,Hadoop 3.1.1, Hive 3.1.3000,HBase 2.2.3,Solr 8.4.1
  • CDH 6.3.2集群。组件版本:Hive 2.1.1

备注:为了能在CDH6上采集到字段级别的血缘,必须确保补丁HIVE-14706已打到CDH6的Hive 2.1.1上。

使用HDP Atlas采集元数据

1.获取Atlas Hive Hook的jar包

在HDP平台上,通常可以从/usr/hdp/3.1.5.0-152/atlas/hook/hive/atlas-hive-plugin-impl获取Atlas Hive Hook的所有jar包(包括依赖包):

02e034bbabb5046e5cfe3f7a99d7a4b8.png

2.复制Atlas jar包到CDH节点

将HDP的Atlas Hive Hook的jar包复制到CDH的HS2和HMS节点上。比如:将jar包复制到/opt/local/hive/lib目录下,并将ower更改为hive:hive:

4ef2c820f1f0038c6efde11a8e4f109e.png

3.复制Atlas配置文件到CDH节点

在CDH的HS2和HMS节点上创建/etc/atlas/conf目录,并将HDP Atlas配置文件atlas-application.properties复制到该目录:

45be658e4e5b10a9e19930e7569fb189.png

Atlas配置文件内容:

327ec5815c3f69ccd536705ccc07bb64.png

需要将atlas.cluster.name设置为合适的名称,以便在Atlas Server上区分哪些元数据是来自于该CDH集群。

4.更改CDH的Hive配置

(1)在Hive服务高级配置代码段增加hive.reloadable.aux.jars.path和hive.exec.post.hooks配置项:

0edf3dcfc5083d3a465024bb668d0b46.png

(2)在HiveServer2和Hive Metastore Server的Java配置选项里增加配置:

acf86e16a2bd2227896f82f50190262a.png

重启Hive服务。

5.验证

在CDH的beeline上执行以下SQL:

create table default.test_hook_hdp_1 (id int, name string);create table default.test_hook_hdp_2 as select * from default.test_hook_hdp_1;

登录HDP的Atlas Web UI,验证元数据和血缘的采集情况:

  • 采集到了CDH的default数据库的元数据:
a277ee602ea80235288ceca778450bff.png
  • 采集到了CDH的test_hook_hdp_1和test_hook_hdp_2表的元数据:
a707383d699d2972ef2121eb30fece00.png
  • 采集到了表级血缘:
82b547937d5d7f4c2e6a270026226dd6.png
  • 采集到了字段级血缘:
27a9bddaf528c2f45ea2128c2ddeb16a.png

使用CDP Atlas采集元数据

1.获取Atlas Hive Hook的jar包

在CDP平台上,通常可以从/opt/cloudera/parcels/CDH-7.1.2-1.cdh7.1.2.p0.4253134/lib/hive/lib/atlas-hive-plugin-impl获取Atlas Hive Hook的所有jar包(包括依赖包):

e430e700ed206024bfb0f549ef2c3694.png

2.复制Atlas jar包到CDH节点

将CDP的Atlas Hive Hook的jar包复制到CDH的HS2和HMS节点上。比如:将jar包复制到/opt/local/hive/lib712目录下,并将ower更改为hive:hive:

6e44aae273a0870defef3fa9b6274451.png

3.复制Atlas配置文件到CDH节点

在CDH的HS2和HMS节点上创建/etc/atlas/conf目录,并将CDP Atlas配置文件atlas-application.properties复制到该目录:

9e277cfe6111655b108d30314f24864b.png

Atlas配置文件内容:

5a3680ebcab763f006c0fc516210a2ae.png

CDP Atlas增加了一个新的配置参数atlas.metadata.namespace,用于指定来自某个集群的元数据所在的命名空间;当然,也可以继续使用旧的配置参数atlas.cluster.name。CDP Atlas会优先查找atlas.metadata.namespace,当找不到该参数时,再查找atlas.cluster.name。

4.更改CDH的Hive配置

(1)在Hive服务高级配置代码段增加hive.reloadable.aux.jars.path和hive.exec.post.hooks配置项:

dd9fc47e8c1c1d77d0f6623074386642.png

(2)在HiveServer2和Hive Metastore Server的Java配置选项里增加配置:

acf86e16a2bd2227896f82f50190262a.png

重启Hive服务。

5.验证

在CDH的beeline上执行:

create table default.test_hook_cdp_1 (id int, name string);create table default.test_hook_cdp_2 as select * from default.test_hook_cdp_1;

登录CDP的Atlas Web UI,验证元数据和血缘的采集情况:

  • 采集到了CDH的default数据库的元数据:
bb1af3c28645dd7a011b0378dbbefed5.png
  • 采集到了CDH的test_hook_cdp_1和test_hook_cdp_2表的元数据:
09e4f54a24e3b3b6f770b391faabe4b7.png
  • 采集到了表级血缘:
06f5403d5bd0b92997a0d53650681f45.png
  • 采集到了字段级血缘:
d666d1c6ea3a12c2f8fca1888a1451d8.png

备注:CDP Atlas Hive Hook的HiveMetaStoreBridge类的getDatabaseName方法使用了Hive3的接口获取database的catalog name:

public static String getDatabaseName(Database hiveDB) {    String dbName      = hiveDB.getName().toLowerCase();    String catalogName = hiveDB.getCatalogName() != null ? hiveDB.getCatalogName().toLowerCase() : null;    if (StringUtils.isNotEmpty(catalogName) && !StringUtils.equals(catalogName, DEFAULT_METASTORE_CATALOG)) {        dbName = catalogName + SEP + dbName;    }    return dbName;}

但因为CDH6的Hive是2.1.1版本,所以,运行在CDH6环境下的CDP Atlas Hive Hook在获取catalog name时,会报以下错误:

java.lang.NoSuchMethodError: org.apache.hadoop.hive.metastore.api.Database.getCatalogName()

针对该问题,有两种处理方式:

1.使用HDP Atlas Hive Hook的jar包。因为HDP jar包没有尝试调用Hive3接口获取catalog name(catalog name不作为database name的一部分),所以可以规避该错误。

2.修改CDP Atlas Hive Hook的HiveMetaStoreBridge类,在获取catalog name抛异常时不影响hook的运行:

public static String getDatabaseName(Database hiveDB) {    String dbName      = hiveDB.getName().toLowerCase();    //String catalogName = hiveDB.getCatalogName() != null ? hiveDB.getCatalogName().toLowerCase() : null;    String catalogName = null;    try {        if (hiveDB.getCatalogName() != null) {            catalogName = hiveDB.getCatalogName().toLowerCase();        }    } catch (NoSuchMethodError e) {        LOG.warn("Failed while getting catalog name of database");    }    if (StringUtils.isNotEmpty(catalogName) && !StringUtils.equals(catalogName, DEFAULT_METASTORE_CATALOG)) {        dbName = catalogName + SEP + dbName;    }    return dbName;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值