Hive中新增自定義函式(UDF)方法及實踐

loveheping發表於2018-01-12
環境介紹:CentOS7+hive-1.1.0-cdh5.7.0+Maven3.3.9

1、下載原始碼 
   hive-1.1.0-cdh5.7.0-src.tar.gz 
   

2、解壓原始碼
   tar -zxvf hive-1.1.0-cdh5.7.0-src.tar.gz -C /home/hadoop/
   cd /home/hadoop/hive-1.1.0-cdh5.7.0

3、將HelloUDF.java檔案增加到HIVE原始碼中
   cp HelloUDF.java /home/hadoop/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/udf/

4、修改FunctionRegistry.java 檔案
   cd /home/hadoop/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/exec/
   vi FunctionRegistry.java
   在import中增加:import org.apache.hadoop.hive.ql.udf.HelloUDF;
   在檔案頭部 static 塊中新增:system.registerUDF("helloUDF", HelloUDF.class, false);

5、重新編譯
   cd /home/hadoop/hive-1.1.0-cdh5.7.0
   mvn clean package -DskipTests -Phadoop-2 -Pdist

6、編譯結果全部為:BUILD SUCCESS
   檔案所在目錄:/home/hadoop/hive-1.1.0-cdh5.7.0/hive-1.1.0-cdh5.7.0/packaging/target

7、配置hive環境
   配置hive環境時,可以全新配置或將編譯後帶UDF函式的包複製到舊hive環境中:
   7.1、全部配置:參照之前文件。。。。。。。。。。。。。。

   7.2、將編譯後帶UDF函式的包複製到舊hive環境
      到/home/hadoop/hive-1.1.0-cdh5.7.0/packaging/target/apache-hive-1.1.0-cdh5.7.0-bin/apache-hive-1.1.0-cdh5.7.0-bin/lib下,找到hive-exec-1.1.0-cdh5.7.0.jar包,並將舊環境中對照的包替換掉
      命令:
      cd /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib
      mv hive-exec-1.1.0-cdh5.7.0.jar hive-exec-1.1.0-cdh5.7.0.jar_bak
      cd /home/hadoop/hive-1.1.0-cdh5.7.0/packaging/target/apache-hive-1.1.0-cdh5.7.0-bin/apache-hive-1.1.0-cdh5.7.0-bin/lib
      cp hive-exec-1.1.0-cdh5.7.0.jar /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib
  最終啟動hive

8、測試:
   hive
   hive (default)> show functions ;   -- 能檢視到有 helloudf


若澤大資料交流群:671914634

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31511218/viewspace-2150100/,如需轉載,請註明出處,否則將追究法律責任。

相關文章