前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0819-使用CDP7.1.3的Atlas采集CDH5.15.1的元数据和血缘

0819-使用CDP7.1.3的Atlas采集CDH5.15.1的元数据和血缘

作者头像
Fayson
发布2020-12-14 14:49:38
1.9K0
发布2020-12-14 14:49:38
举报
文章被收录于专栏:Hadoop实操

作者:谢敏灵

Atlas元数据采集框架

目的

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

验证环境

  • CDP 7.1.3集群。组件版本:Atlas 2.0.0.7.1.3.0-100,Hadoop 3.1.1, Hive 3.1.3000,HBase 2.2.3,Solr 8.4.1
  • CDH 5.15.1集群。组件版本:Hive 1.1.0+cdh5.15.1+1395

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

使用CDP Atlas采集元数据

1.获取Atlas Hive Hook的jar包

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

2.复制Atlas jar包到CDH节点

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

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

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

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

4.更改CDH的Hive配置

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

(2)配置HIVE_AUX_JARS_PATH:

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

重启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数据库的元数据:
  • 采集到了CDH的test_hook_cdp_1和test_hook_cdp_2表的元数据
  • 采集到了表级血缘:
  • 采集到了字段级血缘:

备注:为了让CDP Atlas Hook能在CDH5环境下运行,需要修改部分CDP Atlas代码:

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

代码语言:javascript
复制
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;
}

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

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

针对该问题,修改CDP Atlas Hive Hook的HiveMetaStoreBridge类,在获取catalog name抛异常时不影响hook的运行:

代码语言:javascript
复制
    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;
}

2.CDH5.15.1的依赖包commons-configuration的版本是1.6,版本过低,其AbstractConfiguration类的getList方法缺乏将boolean或int这种primitive类型的值转化为List的逻辑,造成Atlas的ApplicationProperties类初始化失败,进而造成CDH5.15.1的Hive Server2无法正常使用。对于该问题,临时的处理方法是更改ApplicationProperties.setDefaults方法,将boolean和int类型的参数值转换为String。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档