天天看點

CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

HiveUDF是hive自定義函數,可以應用hiveSQL中。

本文通過java編寫了距離查詢函數getDistane,傳參2個參數(城市位址),通過調用高德地圖的api查詢兩地之間的距離。

編寫UDF函數

CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

将程式打包成getDistance.jar包

注意:

1、 編寫的類必須繼承org.apache.hadoop.hive.ql.exec.UDF類

2、 業務函數必須為public 權限,且函數名稱必須為evaluate

通過hue将jar包上傳至hdfs

1、 使用hdfs使用者登入至hue

2、 将jar上傳至根目錄

CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

通過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';             
CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

重新整理函數庫

注冊成功後,重新整理函數庫

1.    reload function             
CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

注:删除自定義函數指令

drop function [function_name]

reload function

驗證函數

由于本執行個體需要調用高德地圖api,需要連接配接外網

1、 配置虛拟機node1,使其能連接配接外網

修改 /etc/sysconfig/network-scripts/ifcfg-ens33檔案,将BOOTPROTO=static改為BOOTPROTO=dhcp,修改後如下圖:

CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

重新開機網絡服務 systemctl restart network

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

查詢北京至上海的距離

1.    select concat(getDistance('北京','上海'),'KM') as distance             
CDH6.2版本 HiveUDF 應用測試說明編寫UDF函數通過hue将jar包上傳至hdfs通過hue将jar包内的函數注冊至hive

結果:1211KM,執行成功