之前帮业务方固化过hive-0.7的自定义的UDF,由于现在大部分业务数据都已经迁移到hadoop2.4.0,hive使用的版本是0.13,之前固化的UDF不能用了,让在0.13上面也固化一下,以下是固化过程:
1、常用的自定义函数有:mid,url_to_mid ,row_number ,findid ,nvl
2、udf包:hive-udf-1.0.jar
3、将hive-udf-1.0.jar包作为编译hive-exec依赖的方式有以下两种,选择其中一种就行:
(1)、将hive-udf-1.0.jar打进maven本地库,hive从本地maven库获取
mvn install:install-file -Dfile=/Users/heliangjun/Desktop/hive-udf-1.0.jar -DgroupId=com.sina.dw -DartifactId=hive-udf -Dversion=1.0 -Dpackaging=jar
修改hive/ql下面的pom.xml文件,增加以下内容
<dependency>
<groupId>com.sina.dw</groupId>
<artifactId>hive-udf</artifactId>
<version>1.0</version>
<optional>true</optional>
</dependency>
(2)、mavn打包的时候使用scop为system,指定包路径
<dependency>
<groupId>com.sina.dw</groupId>
<artifactId>hive-udf</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>$JAR_PATH/hive-udf-1.0.jar</systemPath>
</dependency>
4、修改hive类
hive-0.13.0/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
增加以下内容:
import dw.udf.FindId;
import dw.udf.UrlToMid;
import dw.udf.mid;
static {
registerUDF("url_to_mid”,UrlToMid.class, false);
registerUDF("mid", mid.class, false);
registerUDF("findid”,FindId.class ,false);
}
5、打包生成hive-exec-0.13.0.jar
cd hive-0.13.0/ql/
执行:
mvn package -DskipTests -Phadoop-2
6、拷贝包修改配置文件
(1)、将生成的包hive-exec-0.13.0.jar拷贝到$HADOOP_HOME/share/hadoop/common/lib目录下
(2)、拷贝hive-udf-1.0.jar到$HIVE_HOME/lib目录下
(3)、修改hive配置文件hive-site.xml,修改配置项hive.aux.jars.path
<property>
<name>hive.aux.jars.path</name>
<value>file:///***.jar,file:///***/hive-0.13.0/lib/hive_udf.jar</value>
</property>
注意:在我的环境下必须把hive-exec-0.13.0.jar放到hadoop下面,放到$HIVE_HOME/lib下不生效,这个问题是从执行hive命令时,提示信息知道的:
hive
Logging initialized using configuration in jar:file:$HADOOP_HOME/share/hadoop/common/lib/hive-exec-0.13.0.jar!/hive-log4j.properties
hive>7、测试
查询mid转url
select mid(‘3520617028999724‘) from dual
查询mid
select url_to_mid(‘z62QS3Ghr‘,‘1‘,‘0‘) from dual
博文中短链点击次数查询:
select t1.uid,count(1) from hue_lilin4_mid t1 join f_tblog_behavior b on t1.uid=findid(b.extend,‘mid‘) and b.dt>=‘2012-07-21‘ and b.dt<=‘2012-08-12‘ and b.behavior=‘14000014‘ group by t1.uid
8、一起ok,over!
原文地址:http://blog.csdn.net/bigdatahappy/article/details/43567315