简介

公司有个元数据管理平台,会定期同步 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>

参考文档

如何监听对 HIVE 元数据的操作的更多相关文章

  1. angular 监听离开页面执行相关操作

    $scope.$on("$destroy", function() { //...})

  2. android 监听短信并发送到服务器

    1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容.   实例如下: SystemE ...

  3. Spring Boot实现一个监听用户请求的拦截器

    项目中需要监听用户具体的请求操作,便通过一个拦截器来监听,并继续相应的日志记录 项目构建与Spring Boot,Spring Boot实现一个拦截器很容易. Spring Boot的核心启动类继承W ...

  4. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  5. Android输入法 监听事件

    登录界面有一个输入用户名和密码的编辑框: private EditText et_userName;// 账户 private EditText et_password;// 密码 布局文件如下: & ...

  6. JS 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求: 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  7. JS监听浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...

  8. 监听当点击微信等app的返回按钮或者浏览器的上一页或后退按钮的事件

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  9. 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那 ...

随机推荐

  1. unity 人工智能AI,装备解锁临时笔记

    A*算法的一种改进设想:1.如何让角色到达目标点的过程中更加平滑:获取一串到达目标点的网格串之后,就实时用带形状的物理射线检测能否直接到达下一个目标点的再下一个目标点,如果能到达,那么直接朝该方向运动 ...

  2. 【转】JS浮点数运算Bug的解决办法

    37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一 ...

  3. centos下配置nginx遇到的一些基本的坑

    作为一个用.net的渣渣,常年混迹在window平台下,对Linux啥都不懂.随着.net core开源.跨平台后,也开始学习下linux. 在Desktop/Webs下放了一个index.html的 ...

  4. " XSS易容术---bypass之编码混淆篇+辅助脚本编写"

    一.前言本文原创作者:vk,本文属i春秋原创奖励计划,未经许可禁止转载!很多人对于XSS的了解不深.一提起来就是:“哦,弹窗的”.”哦,偷cookie的.”骚年,你根本不知道什么是力量.虽然我也不知道 ...

  5. ajax请求报语法错误

    今天改代码修正完一个ajax请求后,调试发现出错进error方法,查看错误信息报语法错误,具体是调用parseJSON方法时出错,因为我是用json方式传递的参数,所以第一时间查看data参数是否正确 ...

  6. Go指南练习 rot13Reader

    题目: 练习:rot13Reader 有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流. 例如,gzip.NewReader 函数接受一个 io. ...

  7. 初识SQL语句

    SQL(Structured Query Language ) 即结构化查询语言 SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为3种类型: ...

  8. [LeetCode]138复制带随机指针的链表

    题目描述: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深度拷贝. 思路: 先遍历链表,将每个节点对应的随机指针指向的对象利用Hash ...

  9. asp.net core中遇到需要自定义数据包解密方法的时候

    最近将公司的项目用.netcore重写, 服务的http外部接口部分收发消息是DES加解密的, 那么在asp.net core mvc的action处理之前需要加入解密这个步骤. 我第一想到的是用fi ...

  10. 微信小程序图片变形解决方法

    微信小程序的image标签中有个mode属性,使用aspectFill即可 注:image组件默认宽度300px.高度225px mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式 ...