在工作中,我們需要用到自定義UDF函數:
????1.可以創建持久函數
????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/
進入UDF代碼的目錄
cd?ql/src/java/org/apache/hadoop/hive/ql/udf/ ------這里我們可以看到好多的UDF代碼,以UDFXXX.java開頭
將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...此處為開發業務邏輯的地方 ????????return?"Hello:"?+?input; ????} ????//下面為測試代碼 ????public?static?void?main(String[]?args)?{ ????????HelloUDF?udf?=?new?HelloUDF(); ????????String?output?=?udf.evaluate("測試數據"); ????????System.out.println(output); ????} }
在源代碼中注冊自定義的UDF函數
cd?ql/src/java/org/apache/hadoop/hive/ql/exec/ #vim?FunctionRegistry.java import?org.apache.hadoop.hive.ql.udf.HelloUDF;
在176行增加如下內容
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復制到${HIVE_HOME}/lib/目錄下
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。