1 先创建函数类文件
1.1 使用IDEA创建maven项目,创建HelloUDF类
1.2 运行HelloUDF类,测试是否成功
1.3 将HelloUDF类打成jar包。
2 创建函数
2.1 创建临时函数
临时函数仅对当前session(黑窗口)有效。
2.1.1 添加jar包的两种方法
方法一: add jar /home/hadoop/lib/hive-1.0-SNAPSHOT.jar;
方法二: 在hive的文件夹下面创建auxlib文件夹,将jar包上传到auxlib文件夹下面,重启hive。
2.1.2 创建临时函数
语法:CREATE TEMPORARY FUNCTION function_name AS class_name;
function_name函数名
class_name 类路径,包名+类名
实例:
-- 创建sayhello函数
hive> create temporary function sayhello as 'com.ruozedata.bigdata.HelloUDF';
OK
Time taken: 0.087 seconds
hive>
-- 查看函数列表
hive> show functions;
OK
abs
acos
add_months
sayhello
hive>
-- 测试使用函数
hive> select sayhello('zhang','san') from dual ;
OK
Hello:zhang : san
Time taken: 0.558 seconds, Fetched: 1 row(s)
hive>
2.1.3 删除临时函数
语法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
实例:
hive> DROP TEMPORARY FUNCTION IF EXISTS sayhello;
OK
Time taken: 0.015 seconds
hive>
2.2 创建永久函数
2.2.1 创建永久函数的语法:
CREATE FUNCTION [db_name.]function_name AS class_name
[USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
file_uri:是hdfs上的jar包目录
2.2.2 添加jar包的两种方法
-- hdfs上的根目录下创建lib文件夹
[hadoop@hadoop002 lib]$ hadoop fs -mkdir /lib
18/06/29 16:39:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop002 lib]$
-- 将jar包上传到hdfs上的/lib 文件夹下
[hadoop@hadoop002 lib]$ hadoop fs -put /home/hadoop/lib/hive-1.0-SNAPSHOT.jar /lib/
18/06/29 16:40:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop002 lib]$
-- 查看jar
[hadoop@hadoop002 lib]$ hadoop fs -lsr /lib
lsr: DEPRECATED: Please use 'ls -R' instead.
18/06/29 16:40:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
-rw-r--r-- 1 hadoop supergroup 3242 2018-06-29 16:40 /lib/hive-1.0-SNAPSHOT.jar
[hadoop@hadoop002 lib]$
2.2.3 创建永久函数:
hive> CREATE FUNCTION sayhello AS 'com.ruozedata.bigdata.HelloUDF' USING JAR 'hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar';
converting to local hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar
Added [/tmp/22d50f26-5227-479e-9319-cb28985b8f5d_resources/hive-1.0-SNAPSHOT.jar] to class path
Added resources: [hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar]
OK
Time taken: 0.207 seconds
hive>
-- 查看函数列表
hive> show functions;
OK
abs
acos
add_months
ruozedata.sayhello
hive>
ruozedata.sayhello函数创建成功。永久函数是已:库名.函数名的存在,同库使用的时候可以直接用函数名,不同库使用的时候需要带上库名
-- 测试函数
hive> select sayhello("ruozedata") from dual ;
OK
Hello:ruozedata
Time taken: 0.145 seconds, Fetched: 1 row(s)
hive>
2.2.4 在MySQL库里面查看函数信息
注意:
临时函数和永久函数的区别: 临时函数仅对当前session(黑窗口)有效。 永久函数是全局的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29609890/viewspace-2157096/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29609890/viewspace-2157096/