公司有个元数据管理平台,会按期同步 HIVE 中的元数据。但这样作有个问题,就是若是在 HIVE 中插入了一张新表或者新库等 HIVE 元数据变动的操做,元数据管理平台不能及时与 HIVE 表中的数据进行同步。所以须要调研下 HIVE 中有没有相似的监听机制,能够实现 HIVE 中有元数据更改时,能及时发通知给 元数据平台。总体的需求图以下所示git
因为公司使用的 Hive 版本是 1.2.1,本文也会以此版本进行说明。若是您使用的是其余 HIVE 版本,没法就文章中的问题进行对应,请自行查阅 HIVE 官方文档。先来看下 HIVE 的基本操做。github
$ 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 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
nohup hive --service metastore 2>&1 & nohup hive --service hiveserver2 2>&1 &
获取 HIVE 进程 ID插件
ps -ef |grep hive
kill 掉对应进程code
通过调研, 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>