如何監聽對 HIVE 元資料的操作
阿新 • • 發佈:2019-01-12
目錄
簡介
公司有個元資料管理平臺,會定期同步 HIVE 中的元資料。但這樣做有個問題,就是如果在 HIVE 中插入了一張新表或者新庫等 HIVE 元資料變更的操作,元資料管理平臺不能及時與 HIVE 表中的資料進行同步。因此需要調研下 HIVE 中有沒有類似的監聽機制,可以實現 HIVE 中有元資料更改時,能及時發通知給 元資料平臺。整體的需求圖如下所示
由於公司使用的 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
獲取 HIVE 程序 ID
ps -ef |grep hive
kill 掉對應程序
監聽對 HIVE 元資料的操作
經過調研, HIVE 中存在一個事件監聽抽象類 MetaStoreEventListener
,具體 package 為 org.apache.hadoop.hive.metastore
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>