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裏的,就能夠了。

相關文章
相關標籤/搜索