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