zoukankan      html  css  js  c++  java
  • 如何监听对 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>
    

    参考文档

  • 相关阅读:
    [Javascript] What is JavaScript Function Currying?
    [Javascript] Array methods in depth
    [ES6] ... spread operator
    [AngularJS] New in Angular 1.5 ng-animate-swap
    [Reduc] React Counter Example
    [Redux] Implementing Store from Scratch
    [Redux] Store Methods: getState(), dispatch(), and subscribe()
    [Redux] Introduction
    [Javascript] Intro to Recursion
    未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用
  • 原文地址:https://www.cnblogs.com/reycg-blog/p/10259086.html
Copyright © 2011-2022 走看看