hive添加永久自定义函数

永久自定义hive函数

1:作这件事的缘由:

有一些函数是比较基础的,公用的,每次都要create temporary function麻烦了,这样的基础函数须要直接集成到hive中去,避免每次都要建立。 java

2:步骤

本人拥有一个帐户zb_test linux

自定义的函数已经准备好 apache


登录linux帐户,修改该帐户的home目录下的.bashrc文件:

CLASSPATH改为以下: bash

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/ 函数

tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li oop

b/*:$CLASSPATH(目的是本身编译的时候要用到) 测试

获取hive-0.12.0-cdh5.0.0-src.tar.gz的源代码

解压,找到hive-exec-0.12.0-cdh5.0.0.jar包(hive函数跟这个有关),再解压。 spa

jar -xvf XXX.jar hadoop

编译自定义函数的java文件,好比放在utf下 io

Javac ./utf/*

产生.class文件,放到abc目录下。

把.class文件打成jar包

Jar -cvf ./hello.jar ./abc/*

产生一个jar包,叫hello.jar

把jar包放到/data/zb_test/目录下

而后修改/data/zb_test/.bashrc文件的:

export CLASSPATH=/data/zb_test/hello.jar:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/lib/*:$CLASSPATH(为了测试用的)

将函数test注册到hive的函数列表中
修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件
import org.apache.hadoop.hive.ql.udf.UDFTest;

registerUDF(“test”, UDFTest.class,false);

重要步骤:

1把刚刚产生的全部的.class文件都放到修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf下面

2:而后编译FunctionRegistry.java文件:编译经过之后,咱们找到hive-exec-0.12.0-cdh5.0.0.jar里面的$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.class文件,咱们把替换了。

这些路径都是在hive-exec-0.12.0-cdh5.0.0.jar解压后的org的路径下的。

其实把这两个步骤作了之后,从新把刚刚解压的hive-exec-0.12.0-cdh5.0.0.jar打成jar包,替换了hive里的,就能够了。

相关文章
相关标签/搜索