如何監聽對 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>

參考文檔

相關文章
相關標籤/搜索