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,執行成功