開發與維運

CDH6.2版本 HiveUDF 應用測試說明

HiveUDF是hive自定義函數,可以應用hiveSQL中。
本文通過java編寫了距離查詢函數getDistane,傳參2個參數(城市地址),通過調用高德地圖的api查詢兩地之間的距離。

編寫UDF函數

1.png

將程序打包成getDistance.jar包

注意:
1、 編寫的類必須繼承org.apache.hadoop.hive.ql.exec.UDF類
2、 業務函數必須為public 權限,且函數名稱必須為evaluate

通過hue將jar包上傳至hdfs

1、 使用hdfs用戶登錄至hue
2、 將jar上傳至根目錄

2.png

通過hue將jar包內的函數註冊至hive

使用hiveSql命令註冊函數

命令格式:Create function [function_name] as [‘function_class’] using jar [‘jar_path’]

註冊函數名稱為:getDistance,jar包的class為:com.my.GetDistance,jar包的路徑為hdfs:///getDistance.jar

1.    create function getDistance as 'com.my.GetDistance' using jar 'hdfs:///getDistance.jar';  

3.png

刷新函數庫

註冊成功後,刷新函數庫

1.    reload function  

4.png

注:刪除自定義函數命令
drop function [function_name]
reload function

驗證函數

由於本實例需要調用高德地圖api,需要連接外網
1、 配置虛擬機node1,使其能連接外網
修改 /etc/sysconfig/network-scripts/ifcfg-ens33文件,將BOOTPROTO=static改為BOOTPROTO=dhcp,修改後如下圖:

5.png

重啟網絡服務 systemctl restart network

2、 執行hiveSql語句驗證函數執行結果

查詢北京至上海的距離

1.    select concat(getDistance('北京','上海'),'KM') as distance  

6.png

結果:1211KM,執行成功

Leave a Reply

Your email address will not be published. Required fields are marked *