hive 自定义UDF,hive编译

来源:互联网 发布:sql server 取绝对值 编辑:程序博客网 时间:2024/05/22 01:38

hive增加临时函数

要自定一个hive的函数,步骤如下

1、写一个java类 要继承org.apache.hadoop.hive.ql.exec.UDF类实现evaluate 

    下面是一个替换字符串的函数,因为函数以后是在hadoop上运行,所以数据类型是hadoop的数据类型

引入的jar包:hive的所有jar 和 hadoop的hadoop-common-2.5.2.jar 

package hive.udf;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text;public class CharRepace extends UDF{public Text evaluate(Text in,Text old, Text n){String result = in.toString().replace(old.toString(), n.toString());return new Text(result);}}

把上面的代码打成NUDF.jar


2、添加jar包(在hive命令行里面执行)
hive> add jar /root/NUDF.jar;


3、创建临时函数
hive> create temporary function replace as 'hive.udf.CharRepace;

4.测试一下是否成功

hive> select replace(nation,'\t','') from tableName;


注意:这种方法每次使用都要add,create一下

add jar /root/NUDF.jar;drop temporary function replace;create temporary function replace as 'hive.udf.CharRepace;


hive编译,增加正式函数

上面只是添加临时的函数,如果想添加为正式函数,可以把代码添加到hive中,在重新编译jar。


编译步骤如下

1、把上面的java文件复制到 apache-hive-0.13.1-src/ql/src/java/org/apache/hadoop/hive/ql/udf 下边。当然java的package 要修改成package org.apache.hadoop.hive.ql.udf;

2、修改 org.apache.hadoop.hive.ql.exec.FunctionRegistry  

     添加 import org.apache.hadoop.hive.ql.udf.CharRepace;

              registerUDF("strrc", CharRepace.class, false);     "strrc"是你的函数名


3、cd到apache-hive-0.13.1-src/ql目录下

   执行编译任务mvn clean package -Phadoop-2 -Pdist -DskipTests -Dtar    

   mvn如果没有安装就要安装一下,

  -Phadoop-2 是说明hadoop是用的hadoop2,如果用的是hadoop1 ,则改成  -Phadoop-1

 

4、经过上面的编译后,在当前文件夹生成了一个target文件夹,复制里面的hive-exec-0.13.1.jar ,替换掉你hive安装程序lib目录下的相同jar包

5、启动hive测试一下你的函数是否增加成功

0 0
原创粉丝点击