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

简介

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

因为公司使用的 Hive 版本是 1.2.1,本文也会以此版本进行说明。若是您使用的是其余 HIVE 版本,没法就文章中的问题进行对应,请自行查阅 HIVE 官方文档。先来看下 HIVE 的基本操做。github

HIVE 基本操做

获取 HIVE 源码

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

切换到 hive-1.2 分支shell

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

切换到 hive 1.2.1 tagapache

git checkout release-1.2.1

编译 HIVE 源码

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

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

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

启动 HIVE

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

中止 HIVE

  1. 获取 HIVE 进程 ID插件

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

监听对 HIVE 元数据的操做

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

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>

参考文档

相关文章
相关标签/搜索