如何监听对 HIVE 元数据的操作

简介

公司有个元数据管理平台,会定期同步 HIVE 中的元数据。但这样做有个问题,就是如果在 HIVE 中插入了一张新表或者新库等 HIVE 元数据变更的操作,元数据管理平台不能及时与 HIVE 表中的数据进行同步。因此需要调研下 HIVE 中有没有类似的监听机制,可以实现 HIVE 中有元数据更改时,能及时发通知给 元数据平台。整体的需求图如下所示

1202311-20190112112129158-1118262538.png

由于公司使用的 Hive 版本是 1.2.1,本文也会以此版本进行说明。如果您使用的是其他 HIVE 版本,无法就文章中的问题进行对应,请自行查阅 HIVE 官方文档。先来看下 HIVE 的基本操作。

HIVE 基本操作

获取 HIVE 源码

$ git clone https://github.com/apache/hive.git

切换到 hive-1.2 分支

git checkout -b branch-1.2 origin/branch-1.2

切换到 hive 1.2.1 tag

git checkout release-1.2.1

编译 HIVE 源码

hive 1.2.1 版本既支持 hadoop 1 ,也支持 hadoop2 ,可通过 mvn 编译时属性指定。编译 hadoop 2 版本时,命令如下

mvn clean install -DskipTests -Phadoop-2
cd itests
mvn clean install -DskipTests -Phadoop-2

如果在 itests 中编译失败,可忽略错误,不影响对正常代码的编译

启动 HIVE

nohup hive --service metastore  2>&1 & 
nohup  hive --service hiveserver2   2>&1 & 

停止 HIVE

  1. 获取 HIVE 进程 ID

    ps -ef |grep hive
  2. kill 掉对应进程

监听对 HIVE 元数据的操作

经过调研, HIVE 中存在一个事件监听抽象类 MetaStoreEventListener ,具体 package 为 org.apache.hadoop.hive.metastore , 在 HIVE 源码的 metastore 模块下,包含常用的 create table, drop table, create database, drop database 等操作。

public abstract class MetaStoreEventListener implements Configurable {

...
  public void onCreateTable (CreateTableEvent tableEvent) throws MetaException {
  }

  public void onDropTable (DropTableEvent tableEvent)  throws MetaException {
  }

  public void onAlterTable (AlterTableEvent tableEvent) throws MetaException {
  }

  public void onAlterPartition (AlterPartitionEvent partitionEvent)  throws MetaException {
  }

  public void onCreateDatabase (CreateDatabaseEvent dbEvent) throws MetaException {
  }

  public void onDropDatabase (DropDatabaseEvent dbEvent) throws MetaException {
  }

而且这个抽象类在 hive-site.xml 中关联的配置是

    <property>
        <name>hive.metastore.event.listeners</name>
        <value/>
        <description/>
    </property>

只要实现了这个抽象类,将编译的 jar 包放在 ${HIVE_HOME}/lib 目录下,并配置好 hive-site.xml 文件的 hive.metastore.event.listeners 选项,重启即可生效。

开发这个插件时使用的 maven 依赖为

        <dependency>
            <artifactId>hive-exec</artifactId>
            <groupId>org.apache.hive</groupId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.5</version>
        </dependency>

参考文档

转载于:https://www.cnblogs.com/reycg-blog/p/10259086.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值