热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python抽取数据库元数据_0797使用HDP或CDP的Atlas采集CDH6的元数据和血缘

作者:谢敏灵Atlas元数据采集框架目的基于以上框架,使用HDP或CDP的Atlas采集CDH6的元数据和血缘,理论上只需要将相应的Atl

作者:谢敏灵

Atlas元数据采集框架

目的

基于以上框架,使用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包(包括依赖包):

2.复制Atlas jar包到CDH节点

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

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

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

Atlas配置文件内容:

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

4.更改CDH的Hive配置

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

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

重启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数据库的元数据:

采集到了CDH的test_hook_hdp_1和test_hook_hdp_2表的元数据:

采集到了表级血缘:

采集到了字段级血缘:

使用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包(包括依赖包):

2.复制Atlas jar包到CDH节点

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

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

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

Atlas配置文件内容:

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配置项:

(2)在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 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;

}



推荐阅读
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 1.创建目录mkdir-phomerocketmqnamesvr1data&&mkdir-phomerocketmqnamesvr1log&&mkdir-phomerocketm ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
author-avatar
pet宠物情缘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有