您好,登錄后才能下訂單哦!
在工作中,我們需要用到自定義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)頭
將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;
在176行增加如下內(nèi)容
system.registerUDF("HelloUDF",?HelloUDF.class,false);
編譯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
編譯后的文件為:
????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/目錄下
免責(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)容。