作者:谢敏灵

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;

}

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

  1. python 并发 数据库_python写入mysql数据库

    scrapy爬虫成长日记之将抓取内容写入mysql数据库 前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取 ...

  2. Python与数据库

    数据库和Python 持久化存储 在任何应用中,都需要持久化存储,一般有三种基础的存储机制,文件,数据库系统,以及一些混合类型,一种是使用普通文件或者python特定文件进行访问,另一种是使用数据库管 ...

  3. python 写入数据库_python 写入数据库

    Python学习(22)--文件操作1 Python学习(22)--文件操作1 之前我们介绍到的数据类型,如列表,字典或者一个数字,字符等等.都是在程序运行时存储在内存中的,存储在内存中的数据不稳定, ...

  4. 使用程序设计语言访问SQL:JDBC、从Python访问数据库、ODBC、嵌入式SQL

    SQL 提供了一种强大的声明式查询语言.用 SQL 编写查询通常比用通用程序设计语言同样的查询进行编码要简单得多.然而,基于至少两种原因数据库程序员必须能够访问通用程序设计语言: 1.因为 SQL 并 ...

  5. 数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全

    数据科学+python+R+数据库+机器学习+(速查表)cheat sheets大全 Learn, compete, hack and get hired! 学习.竞争.精进.996. 东西永远学不完 ...

  6. Python操作数据库之 MySQL

    Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...

  7. Python 操作数据库(1)

    在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系.它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的 ...

  8. python生成数据库指令_Python学习—数据库操作

    python2中操作数据库:MySQLdb python3中操作数据库:pymysql python接连数据库 1.创建数据库连接: mysql.connect()函数 2.执行数据库操作: 执行数据 ...

  9. 表操作,数据操作,单表查询,python操作数据库

    1.表操作 创建 create table 删除 drop table 查看表结构 desc 表/show create table 表 修改 alter table 表名 rename 新表名 al ...

最新文章

  1. 给老婆写个Python教程
  2. 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
  3. Xcode8 注释快捷键无效, 解决方案
  4. 米哈游蔚来领投“人造太阳”项目!首轮融资4亿,北大物理系校友初创企业:走高温超导路线...
  5. 红帽虚拟化RHEV-架构简介
  6. 蓝桥杯练习系统习题-算法训练3
  7. wxWidgets:wxFileCtrl类用法
  8. MacOS 下如何创建文本文件
  9. android中设置控件的搞,Android中如何自定义控件
  10. sql语句返回近似值
  11. Flutter 开发环境搭建Unable to ‘pub upgrade‘ flutter tool. Retrying in five seconds...
  12. android 组件内部实现触摸事件,更改背景
  13. 尚学堂马士兵Linux视频教程笔记
  14. oracle查询某个时间段的数据
  15. tenacity 报错_Python Tenacity 实现重试机制
  16. Q2增收不增利,“怪兽”无法给自己“充电”
  17. 语音识别-音素的上下文建模
  18. 该换壁纸啦,记录一个用CSS和HTML做的3D立体相册
  19. 给准备做测试的亲友出了一道简单的求和题
  20. ibatis学习以及与mybatis的不同

热门文章

  1. Nagios Plugin for Cacti (npc插件) Download 下载
  2. php 中 sql 查询语句怎么写,sql查询语句有哪些
  3. oracle自动创建分区存储过程,oracle 存储过程创建表分区
  4. Java编码规范注意
  5. 基于JAVA+SpringMVC+MYSQL的网上订餐系统
  6. linux进程理解,进程资源 - 进程基础 - [ 理解Linux进程 ] - 手册网
  7. Echarts数据grid直角坐标系(xAxis、yAxis)详解
  8. win7的一些小知识
  9. Windows 下搭建 Ruby 开发环境
  10. Leetcode: Excel Sheet Column Title