公司有個元數據管理平臺,會按期同步 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>