热门标签 | 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;

}



推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 如何使用Python去除字符串中的非中文字符[Python编程技巧]
    在 Python 中,可以通过正则表达式来实现去除字符串中的非中文字符。具体方法是使用 `re` 模块中的 `re.sub()` 函数,配合正则表达式 `[^u4e00-u9fa5]` 来匹配并替换掉所有非中文字符,从而保留字符串中的中文部分。这种方法简洁高效,适用于多种文本处理场景。 ... [详细]
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社区 版权所有