本来想祝大家节日快乐,哎,无奈浪尖还在写文章。谴责一下,那些今天不学习的人。对于今天入星球的人,今天调低了一点价格。减少了20大洋。机不可失失不再来点击阅读原文或者扫底部二维码。

hive概述

Hive为Hadoop提供了一个SQL接口。 Hive可以被认为是一种编译器,它将SQL(严格来说,Hive查询语言 - HQL,SQL的一种变体)转换为一组Mapreduce / Tez / Spark作业。 因此,Hive非常有助于非程序员使用Hadoop基础架构。 原来,Hive只有一个引擎,即MapReduce。 但是在最新版本中,Hive还支持Spark和Tez作为执行引擎。 这使得Hive成为探索性数据分析的绝佳工具。

基于mapreduce的hive,整个架构图如下:

driver - 接收查询的组件。 该组件实现了会话句柄的概念,并提供了在JDBC /
ODBC接口上的执行和获取数据的api模型。

编译器 -
解析查询的组件,对不同的查询块和查询表达式进行语义分析,最终通过从metastore获取表和分区的信息生成执行计划。

Metastore -
存储仓库中各种表和分区的所有结构信息的组件,包括列和列类型信息,读取和写入数据所需的序列化程序和反序列化程序以及存储数据的相应HDFS文件。

执行引擎 - 执行编译器创建的执行计划的组件。 该计划是一个stages的DAG。
执行引擎管理计划的这些不同阶段之间的依赖关系,并在适当的系统组件上执行这些阶段。

什么是hook

通常,Hook是一种在处理过程中拦截事件,消息或函数调用的机制。 Hive
hooks是绑定到了Hive内部的工作机制,无需重新编译Hive。从这个意义上讲,提供了使用hive扩展和集成外部功能的能力。换句话说,Hive
hadoop可用于在查询处理的各个步骤中运行/注入一些代码。根据钩子的类型,它可以在查询处理期间的不同点调用:

Pre-execution
hooks-在执行引擎执行查询之前,将调用Pre-execution
hooks。请注意,这个目的是此时已经为Hive准备了一个优化的查询计划。

Post-execution hooks
-在查询执行完成之后以及将结果返回给用户之前,将调用Post-execution hooks?。

Failure-execution hooks
-当查询执行失败时,将调用Failure-execution hooks?。

Pre-driver-run 和post-driver-run
hooks-在driver执行查询之前和之后调用Pre-driver-run 和post-driver-run hooks。

Pre-semantic-analyzer 和 Post-semantic-analyzer
hooks-在Hive在查询字符串上运行语义分析器之前和之后调用Pre-semantic-analyzer 和Post-semantic-analyzer
hooks。

hive查询的生命周期

hive查询在hive中的执行过程。

Hive Hook API

Hive支持许多不同类型的Hook。
Hook接口是Hive中所有Hook的父接口。它是一个空接口,并通过以下特定hook的接口进行了扩展:

1.
PreExecute和PostExecute将Hook接口扩展到Pre和Post执行hook。

2.?ExecuteWithHookContext扩展Hook接口以将HookContext传递给hook。HookContext包含了hook可以使用的所有信息。
HookContext被传递给名称中包含“WithContext”的所有钩子。

3.?HiveDriverRunHook扩展了Hook接口,在driver阶段运行,允许在Hive中自定义逻辑处理命令。

4.?HiveSemanticAnalyzerHook扩展了Hook接口,允许插入自定义逻辑以进行查询的语义分析。它具有preAnalyze()和postAnalyze()方法,这些方法在Hive执行自己的语义分析之前和之后执行。

5.?HiveSessionHook扩展了Hook接口以提供会话级hook。在启动新会话时调用hook。用hive.server2.session.hook配置它。

6.?Hive
1.1添加了Query Redactor
Hooks。它是一个抽象类,它实现了Hook接口,可以在将查询放入job.xml之前删除有关查询的敏感信息。可以通过设置hive.exec.query.redactor.hooks属性来配置此hook。

栗子搞起

hive源码中实现了一些hook,具体有以下几个例子:

1.driverTestHook是一个非常简单的HiveDriverRunHook,它打印你用于输出的命令。

2.?PreExecutePrinter和PostExecutePrinter是pre
和 post hook的示例,它将参数打印到输出。

3.?ATSHook是一个ExecuteWithHookContext,它将查询和计划信息推送到YARN
timeline server。

4.?EnforceReadOnlyTables是一个ExecuteWithHookContext,用于阻止修改只读表。

5.?LineageLogger是一个ExecuteWithHookContext,它将查询的血统信息记录到日志文件中。
LineageInfo包含有关query血统的所有信息。

6.?PostExecOrcFileDump是一个post=Execution
hook,用于打印ORC文件信息。

7. PostExecTezSummaryPrinter是一个post-execution
hook,可以打印Tez计数器的摘要。

8. UpdateInputAccessTimeHook是一个pre-execution
hook,雅思报名费可在运行查询之前更新所有输入表的访问时间。

栗子

下面写一个简单的?pre-execution
hook,会在执行的时候输出Hello
from the hook !!。

1.
创建一个工程。


?
?4.0.0

? ?hive-hook-example
? ?Hive-hook-example
? ?1.0

2. 添加hive-exec依赖。

hook的主要依赖就是hive-exec包。


?
? ? ?
? ? ? ? ? ?org.apache.hive
? ? ? ? ? ?hive-exec
? ? ? ? ?
?1.1.0
? ? ? ?
? ?

3.创建一个实现类。

该类要继承自

org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext

该接口只有一个方法。


;

我们的实现仅仅是输出一个字符串。


System.out.();

完整的例子如下:


org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext;
org.apache.hadoop.hive.ql.hooks.HookContext;

{
?
?{
? ? ? ?System.out.println();
? ?}
}

4. 打包使用

?打包


mvn

使用


the Hive terminal issue the commands. Note that you have
jar
target/Hive-hook-example.jar;
hive.exec.pre.hooks=HiveExampleHook;

更多hivehook例子,请参考hive源码,路径:


/

后面,浪尖给出hive的hook在安全控制和metastore监控的hook案例。

[完]

推荐阅读:

重要 | mr使用hcatalog读写hive表

必读|spark的重分区及排序


文章来源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81844217

Hive鲜为人知的宝石-Hooks的更多相关文章

  1. Hive Query生命周期 —— 钩子(Hook)函数篇

    无论你通过哪种方式连接Hive(如Hive Cli.HiveServer2),一个HQL语句都要经过Driver的解析和执行,主要涉及HQL解析.编译.优化器处理.执行器执行四个方面. 以Hive目前 ...

  2. hive-site.xml 参数设置

    <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="confi ...

  3. troubleshooting-Container 'PHYSICAL' memory limit

    原因分析 CDH 集群环境没有对 Container分配足够的运行环境(内存) 解决办法 需要修改的配置文件,将具体的配置项修改匹配集群环境资源.如下: 配置文件 配置设置 解释 计算值(参考) ya ...

  4. hive_学习_01_hive环境搭建(单机)

    一.前言 本文承接上一篇:hbase_学习_01_HBase环境搭建(单机),主要是搭建 hive 的单机环境 二.环境准备 1.说明 hive 的下载来源有: 官方版本:http://archive ...

  5. Hive Hooks介绍

    Hive作为SQL on Hadoop最稳定.应用最广泛的查询引擎被大家所熟知.但是由于基于MapReduce,查询执行速度太慢而逐步引入其他的近实时查询引擎如Presto等.值得关注的是Hive目前 ...

  6. 【转】Hive配置文件中配置项的含义详解(收藏版)

    http://www.aboutyun.com/thread-7548-1-1.html 这里面列出了hive几乎所有的配置项,下面问题只是说出了几种配置项目的作用.更多内容,可以查看内容问题导读:1 ...

  7. [Hive - LanguageManual] Alter Table/Partition/Column

    Alter Table/Partition/Column Alter Table Rename Table Alter Table Properties Alter Table Comment Add ...

  8. hive集成sentry

    1.安装配置sentry 详细步骤见上一篇安装配置sentry 2.配置hive 2.1 Hive-server2集成Sentry 在 /etc/hive/conf/hive-site.xml中添加: ...

  9. Hive metastore整体代码分析及详解

    从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结.那么我们先打开metadata的目录,其目录结构: 可以看到,整个hivemeta的目录 ...

随机推荐

  1. loadrunner11完整卸载

    1.在控制面板中卸载掉loadrunner11的程序 2.删除loadrunner11安装目录 3.删除C盘(和安装目录下)   wlrun.*和vugen.* 4.删除回收站 5.清除注册表(运行r ...

  2. STM32学习笔记:IIC通信协议详解(附带软件模拟源码)

    什么是IIC(I2C)? IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单.双向.二线制.同步串行总线.它是一种多向控制总 ...

  3. ffmpeg 学习:000-概述和库的组成

    背景 ffmpeg bin工具 可能无法满足产品的使用,于是需要通过传参调用ffmpeg库,即在通过更底层的方式使用它. FFmpeg 介绍 FFmpeg是领先的多媒体框架,能够解码,编码,转码,复用 ...

  4. linux环境基于python语言docx转pdf

    windows平台因借助win32com具有多种方法将word转为pdf,但linux环境不具备此环境,win32com包也将import失败,那该如何做呢? # -*- coding: utf-8 ...

  5. JavaScript基于原型的继承

    在一个纯粹的原型模式中,我们会摒弃类,转而专注于对象,基于原型的继承相比基于类的继承的概念上更为简单 if( typeof Object.beget !== 'function') { Object. ...

  6. git 提取某次提交所修改的代码

    git 提取某次提交所修改的代码 应用场景 把分支A的某个功能抽到分支B中. 首先切换到分支B, 然后进行遴选(git cherry-pick). 如果没有冲突, 会自动合并然后使用原信息提交. 如果 ...

  7. VMWare 禁用vmem虚拟内存文件

    使用 VMWare 虚拟机,虚拟机启动后,会在虚拟机目录下建立一个与虚拟内存大小相同的 .vmem文件 这个文件主要是将虚拟机内存的内容映射到磁盘,以支持在虚拟机的暂停等功能 对所有的虚拟机" ...

  8. HDU - 6130 Kolakoski (打表)

    题意:由1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,……合并可得1,22,11,2,1,22,1,22,11,2,11,22,1,再由每个数的位数可得新序列,推出新 ...

  9. 【LeetCode】重新安排行程

    [问题]给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所 ...

  10. 云时代架构阅读笔记九——web应用存在的问题及解决办法

    web应用通常存在的10大安全问题 1.SQL注入 拼接的SQL字符串改变了设计者原来的意图,执行了如泄露.改变数据等操作,甚至控制数据库服务器, SQL Injection与Command Inje ...