hive-0.13固化自定义UDF

来源:互联网 发布:mac avi转mp4 编辑:程序博客网 时间:2024/05/01 06:53

        之前帮业务方固化过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=${LOCAL_JAR_PATH}/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>${LOCAL_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!


0 0
原创粉丝点击