`
heipark
  • 浏览: 2097555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hive UDF(User-Defined-Function) 实战

阅读更多

 问题

 

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

 

方案

hive UDF

 

实现步骤

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

 

package com.xxx.udf;

import java.math.BigDecimal;

import org.apache.hadoop.hive.ql.exec.UDF;

public class UDFTrunc5min extends UDF {

	/**
	 * truncate 5 minute
	 * 
	 * @param timestamp "1312128177.364"
	 * @return
	 */
	public String evaluate(String timestamp) {
		try {
			return  new BigDecimal(timestamp).multiply(new BigDecimal("1000")).longValue() / 300000 * 300000 + "";
		} catch (Exception e) {
			return null;
		}
	}
}

 

  • 将udf打jar包,并上传到hive server上
  • 运行hive cli,执行如下命令:
#添加udf jar
add jar /xxxx/xxx/my_udf.jar;

#创建临时函数,临时函数,每次打开cli都需要创建function
#如果是系统常用的函数可以发布到hive-exec项目,稍后介绍
create temporary function t5m as 'com.xx.udf.Trunc5min';

#使用udf
select t5m(time) from log group by t5m(time);
 

 

注册函数(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

 

添加如下两行:

 

import org.apache.hadoop.hive.ql.udf.UDFTrunc5min;
...

registerUDF("t5m", UDFTrunc5min.class, false);

 

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


 

分享到:
评论
3 楼 myemptyname 2013-07-30  
mark
2 楼 heipark 2011-09-06  
kezhon 写道
前辈能不能请教个问题,我在使用hive写UDF时,函数需要引用外部resource中的文件,但是运行时就报
java.io.FileNotFoundException: resource/placeMap.txt (No such file or directory)。
但是在本地运行无误。
请问可以怎么解决?非常感谢!



分布式运行,必须保证每台datanode都可以访问到这个文件,那理论上这个文件应该放到hdfs上。
1 楼 kezhon 2011-09-06  
前辈能不能请教个问题,我在使用hive写UDF时,函数需要引用外部resource中的文件,但是运行时就报
java.io.FileNotFoundException: resource/placeMap.txt (No such file or directory)。
但是在本地运行无误。
请问可以怎么解决?非常感谢!

相关推荐

    hive UDF需要jar包

    在Hive中,UDF(User Defined Functions)是用户自定义函数,允许开发人员扩展Hive的内置功能,以满足特定的数据处理需求。Hive UDF的实现通常涉及到编写Java代码,并将其打包成JAR(Java Archive)文件,然后在Hive...

    apache-hive-2.0.0-bin.tar

    8. **存储过程**:Hive支持自定义函数(UDF,User Defined Function)、自定义聚合函数(UDAF,User Defined Aggregate Function)和自定义表生成函数(UDTF,User Defined Table Generating Function),用户可以...

    hive-exec-udf

    1. **UDF(User Defined Function)**:单行函数,接受一个或多个参数,返回一个结果。 2. **UDAF(User Defined Aggregation Function)**:聚合函数,用于对一组数据进行操作,如COUNT、SUM等。 3. **UDTF(User ...

    dataiku hive udf

    Hive UDF分为三种主要类别:UDF(User Defined Scalar Functions),UDAF(User Defined Aggregate Functions),以及UDTF(User Defined Table Generating Functions)。UDF处理单行输入并返回单行输出,如字符串...

    hive-udf-collections:Hive 用户定义函数 (UDF) 集合

    而用户定义函数(User Defined Functions, UDFs)是 Hive 提供的一种扩展其内置功能的方式,允许用户根据需求编写自定义的函数。`hive-udf-collections` 是一个专门针对 Hive 的 UDF 集合,它包含了一系列用于处理...

    HIve UDF 说明书

    Hive UDF(User-Defined Functions,用户定义函数)是Hive中强大的功能,允许用户在Hive查询中使用自定义的函数来进行更复杂的操作。Hive是一个建立在Hadoop基础上的高级数据仓库工具,它允许用户使用类似SQL的语言...

    大数据 java hive udf函数的示例代码(手机号码脱敏)

    大数据 Java Hive UDF 函数示例代码(手机号码脱敏)是指使用 Java 语言开发的用户定义函数(User Defined Function,UDF),该函数可以在 Hive 中使用,实现手机号码脱敏的功能。在本文中,我们将通过实例代码,...

    Hive的Udf函数进行数据脱敏

    ADD JAR /path/to/your/hiveUDF.jar; CREATE TEMPORARY FUNCTION mask AS 'com.yourpackage.MaskingUDF'; ``` 4. **使用UDF**: 注册完成后,你可以在查询中直接使用`mask`函数。假设我们有一个包含手机号码的表`...

    Hive UDF开发

    此时,就需要通过自定义函数(User Defined Function, UDF)来扩展Hive的能力。 #### 二、Hive UDF简介 Hive UDF是指用户可以根据自己的业务需求,自定义Java类来实现特定的数据处理逻辑,并将其封装成函数的形式供...

    base64加密解密的hive udf函数

    本文将详细探讨如何在Hive中自定义User Defined Function(UDF)来实现Base64的加密和解密。 首先,我们需要了解Base64的基本原理。Base64是一种将任意二进制数据转化为ASCII字符集的方法,它通过将每3个字节转换为...

    cloudera-hive-cdh6.3.2源码包

    7. **Hive UDF(User Defined Function)** Hive 允许用户自定义函数(UDF),以满足特定的计算需求。源码中的 `udf` 模块包含了内置的 UDF 实现,用户也可以根据 `org.apache.hadoop.hive.ql.udf.generic....

    apache-hive-2.0.0

    6. **存储过程**:允许用户定义自定义函数(UDF, User Defined Function)和复杂的操作,扩展 Hive 的功能。 7. **高可用性**:Hive Server 和 Metastore 可以配置为多实例,以提高服务的可靠性。 8. **安全特性**...

    hive的UDF的编写.docx

    然而,在实际应用中,我们可能需要根据业务需求编写自定义的UDF(User Defined Function),以满足特定的数据处理需求。下面,我们将详细介绍如何使用Java编写hive的UDF,并将其部署到hive中。 UDF的概念 在hive中...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    Hive UDF(User Defined Function)允许用户定义自己的函数,用于实现复杂的数据处理任务。Hive UDF可以使用Java编写,编译后可以在Hive中使用。 10. Hive使用技巧 Hive使用技巧包括数据分区、数据压缩、查询优化...

    hive实验报告.docx

    实验报告主要涵盖了Hive的安装、配置以及基本操作,包括DDL(Data Definition Language)和DML(Data Manipulation Language)的使用,Hive与MySQL的交互,UDF(User Defined Function)的开发,以及部分调优策略的...

    hive按月份加减udf范例

    在Hive中,UDF(User Defined Function)是用户自定义函数,允许我们扩展Hive的功能以满足特定的业务需求。本示例主要讲解如何在Hive中实现按月份的加减操作,这在时间序列分析或周期性报告中非常常见。 标题"hive...

    hive时间按月份加减UDF

    为了实现这样的功能,我们可以自定义UDF(User Defined Function),扩展Hive的功能。标题中的“hive时间按月份加减UDF”指的就是这样一种用户自定义的函数,它可以方便地帮助我们处理与月份增减相关的任务。 文章...

    Hive语法详解.docx (排版清晰,覆盖全面,含目录)

    - **UDF:User-Defined Function**:用户自定义函数,用于扩展Hive的功能。 - **UDAF:User-Defined Aggregation Function**:用户自定义聚合函数,用于实现特定的聚合逻辑。 - **UDTF:User-Defined Table-...

    hive自定义函数demo

    Hive自定义函数(User Defined Function,UDF)是用户编写并集成到Hive系统中的函数,用来处理Hive不内置支持的特定计算或转换任务。UDF接受单个输入参数并返回一个结果,非常适合进行简单的数据转换和计算。 2. *...

    apache-hive-1.2.1源码包(已编译)(含Hive的使用全解)

    Hive可以通过编写自定义函数(UDF, User Defined Function)、UDAF(UDAF, User Defined Aggregate Function)和UDTF(User Defined Table Generating Functions)扩展其功能,满足特定业务需求。 9. **Hive与HBase的...

Global site tag (gtag.js) - Google Analytics