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>
    

    参考文档

  • 相关阅读:
    spring分布式事务学习笔记
    大家说说看针对微信的这个限制,如何吐槽????
    Easy-Mock 一个H5前端接口模拟神器
    CSS设计模式之三权分立模式篇 ( 转)
    引爆你的Javascript代码进化 (转)
    基于jQuery的软键盘
    基于jQuery的数字键盘插件
    支持触屏的zepto轮播图插件
    支持触屏的jQuery轮播图插件
    基于CSS3的3D旋转效果
  • 原文地址:https://www.cnblogs.com/reycg-blog/p/10259086.html
Copyright © 2011-2022 走看看