hive UDF(User-Defined-Function) 实战

 问题

 

hive无法按照5分钟对日志分组

 

方案

hive UDF

 

实现步骤

  • 创建UDF:①extends UDF ②重写evaluate方法

 

Java代码   收藏代码
  1. package com.xxx.udf;  
  2.   
  3. import java.math.BigDecimal;  
  4.   
  5. import org.apache.hadoop.hive.ql.exec.UDF;  
  6.   
  7. public class UDFTrunc5min extends UDF {  
  8.   
  9.     /** 
  10.      * truncate 5 minute 
  11.      *  
  12.      * @param timestamp "1312128177.364" 
  13.      * @return 
  14.      */  
  15.     public String evaluate(String timestamp) {  
  16.         try {  
  17.             return  new BigDecimal(timestamp).multiply(new BigDecimal("1000")).longValue() / 300000 * 300000 + "";  
  18.         } catch (Exception e) {  
  19.             return null;  
  20.         }  
  21.     }  
  22. }  

 

  • 将udf打jar包,并上传到hive server上
  • 运行hive cli,执行如下命令:
Java代码   收藏代码
  1. <span style="font-weight: normal;">#添加udf jar  
  2. add jar /xxxx/xxx/my_udf.jar;  
  3.   
  4. #创建临时函数,临时函数,每次打开cli都需要创建function  
  5. #如果是系统常用的函数可以发布到hive-exec项目,稍后介绍  
  6. create temporary function t5m as 'com.xx.udf.Trunc5min';  
  7.   
  8. #使用udf  
  9. select t5m(time) from log group by t5m(time);</span>  
 

 

注册函数(registerUDF)

每次使用udf的时候都需要create temporary太麻烦,通过registerUDF可以免去此过程,有点麻烦需要下载,修改,编译hive-exec的源码,步骤如下:

 

 

  • Eclipse创建SVN位置:

 

http://svn.apache.org/repos/asf/hive/tags/release-0.7.0

 

 

  • 检出为Java Project

 

创建项目时,删除项目的src目录(hive不需要这个文件夹)

 

右键项目,选择Properties -> Builder -> New... ,添加“Ant Builder”。

 

编辑弹出窗口, Main (tab) - > buildfile -> Browe Workspace,选择hive项目的build.xml文件

 

点击“OK” 按钮

这时已经开始build hive项目了,要下载依赖包,等着吧。

 

  • 添加UDF到源码

放到这里:{Hive_source}\ql\src\java\org\apache\hadoop\hive\ql\udf

 

  • 注册函数

打开文件:{Hive_source}\ql\src\java\org\apache\hadoop\hive\ql\exec\FunctionRegistry.java

 

添加如下两行:

 

Java代码   收藏代码
  1. import org.apache.hadoop.hive.ql.udf.UDFTrunc5min;  
  2. ...  
  3.   
  4. registerUDF("t5m", UDFTrunc5min.classfalse);  

 

  • 将编译好的hive-exec-0.7.0.jar放到hive服务器lib下,干掉之前的jar包,就可以直接使用了,如果使用java client远程访问hive server,需要添加这个jar到自己的lib下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值