溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hive編譯源碼支持自定義UDF函數(shù)

發(fā)布時(shí)間:2020-07-24 22:06:22 來(lái)源:網(wǎng)絡(luò) 閱讀:622 作者:bigdata_lzw 欄目:大數(shù)據(jù)

在工作中,我們需要用到自定義UDF函數(shù):

????1.可以創(chuàng)建持久函數(shù)

????2.也可以將其編譯在源碼中

本文檔以源碼編譯的方式使用,下面為編譯步驟;


  • 下載源碼包

wget?http://archive.cloudera.com/cdh6/cdh/5/hive-1.1.0-cdh6.7.0-src.tar.gz
tar?xf?hive-1.1.0-cdh6.7.0-src.tar.gz
cd?hive-1.1.0-cdh6.7.0/
  • 進(jìn)入U(xiǎn)DF代碼的目錄

cd?ql/src/java/org/apache/hadoop/hive/ql/udf/
------這里我們可以看到好多的UDF代碼,以UDFXXX.java開(kāi)頭

hive編譯源碼支持自定義UDF函數(shù)


  • 將UDF的代碼上面的目錄下

helloUDF.java

package?com.ruozedata.hadoop.udf;
import?org.apache.hadoop.hive.ql.exec.UDF;
public?class?HelloUDF?extends?UDF{
????public?String?evaluate(String?input)?{
????????//TODO...此處為開(kāi)發(fā)業(yè)務(wù)邏輯的地方
????????return?"Hello:"?+?input;
????}

????//下面為測(cè)試代碼
????public?static?void?main(String[]?args)?{
????????HelloUDF?udf?=?new?HelloUDF();
????????String?output?=?udf.evaluate("測(cè)試數(shù)據(jù)");
????????System.out.println(output);
????}
}
  • 在源代碼中注冊(cè)自定義的UDF函數(shù)

cd?ql/src/java/org/apache/hadoop/hive/ql/exec/
#vim?FunctionRegistry.java

import?org.apache.hadoop.hive.ql.udf.HelloUDF;

hive編譯源碼支持自定義UDF函數(shù)

在176行增加如下內(nèi)容

system.registerUDF("HelloUDF",?HelloUDF.class,false);

hive編譯源碼支持自定義UDF函數(shù)

  • 編譯hive

[root@hadoop001?exec]#?pwd
/opt/sourcecode/hive-1.1.0-cdh6.7.0
[root@hadoop001?hive-1.1.0-cdh6.7.0]#mvn?clean?package?-DskipTests?-Phadoop-2?-Pdist

hive編譯源碼支持自定義UDF函數(shù)

編譯后的文件為:

????1.packaging/target/apache-hive-1.1.0-cdh6.7.0-bin.tar.gz

????2. ./lib/hive-exec-1.1.0-cdh6.7.0.jar

  • 使用方式

方式一:將apache-hive-1.1.0-cdh6.7.0-bin.tar.gz重新部署

方式二:將編譯后的/lib/hive-exec-1.1.0-cdh6.7.0.jar復(fù)制到${HIVE_HOME}/lib/目錄下



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI