HiveUDF是hive自定義函數,可以應用hiveSQL中。
本文通過java編寫了距離查詢函數getDistane,傳參2個參數(城市地址),通過調用高德地圖的api查詢兩地之間的距離。
編寫UDF函數
將程序打包成getDistance.jar包
注意:
1、 編寫的類必須繼承org.apache.hadoop.hive.ql.exec.UDF類
2、 業務函數必須為public 權限,且函數名稱必須為evaluate
通過hue將jar包上傳至hdfs
1、 使用hdfs用戶登錄至hue
2、 將jar上傳至根目錄
通過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';
刷新函數庫
註冊成功後,刷新函數庫
1. reload function
注:刪除自定義函數命令
drop function [function_name]
reload function
驗證函數
由於本實例需要調用高德地圖api,需要連接外網
1、 配置虛擬機node1,使其能連接外網
修改 /etc/sysconfig/network-scripts/ifcfg-ens33文件,將BOOTPROTO=static改為BOOTPROTO=dhcp,修改後如下圖:
重啟網絡服務 systemctl restart network
2、 執行hiveSql語句驗證函數執行結果
查詢北京至上海的距離
1. select concat(getDistance('北京','上海'),'KM') as distance
結果:1211KM,執行成功