1. 程式人生 > >如何監聽對 HIVE 元數據的操作?

如何監聽對 HIVE 元數據的操作?

tab alter base 簡介 img 圖片 out cti pac

目錄

  • 簡介
  • HIVE 基本操作
    • 獲取 HIVE 源碼
    • 編譯 HIVE 源碼
    • 啟動 HIVE
    • 停止 HIVE
  • 監聽對 HIVE 元數據的操作
  • 參考文檔

簡介

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

  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>

參考文檔

  • HiveDeveloperFAQ

如何監聽對 HIVE 元數據的操作?