系统环境
Linux Ubuntu 16.04
jdk-7u75-linux-x64
hive-1.1.0-cdh5.4.5
hadoop-2.6.0-cdh5.4.5
相关知识
虽然HiveQL内置了216个函数,但在某些特殊场景下,可能还需要自定义函数。Hive的UDF包括三种:UDF(User-Defined Function)、UDAF(User-Defined Aggregate Function)和UDTF(User-Defined Table-Generating Function)。普通UDF支持一个输入产生一个输出,UDAF支持多个输入一个输出,UDTF支持一个输入多个输出。Hive只支持Java编写的UDF,其他的编程语言只能通过select transform转化为流来与Hive交互。
UDF的用法:
1.UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。
2.编写UDF函数的时候需要注意以下几点:
①自定义UDF需要继承org.apache.hadoop.hive.ql.UDF类。
②需要实现evaluate方法。
③evaluate函数支持重载。
任务内容
某电商有买家收藏夹(buyer_favorite)表,内含(buyer_id,goods_id,date)三个字段,需求是取出date字段中的年份。
我们编写UDF函数,实现需求。
初始数据如下:
目标数据如下:
任务步骤
1.在/data目录下创建/hive5文件夹
mkdir -p /data/hive5
2.切换到/data/hive5目录下,使用wget命令,下载http://192.168.1.100:60000/allfiles/hive5中的文件。
cd /data/hive5
wget http://192.168.1.100:60000/allfiles/hive5/udfjar.tar.gz
wget http://192.168.1.100:60000/allfiles/hive5/sydata
3.将udfjar.tar.gz解压到当前目录。
tar zxvf udfjar.tar.gz
4.输入jps检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。
jps
cd /apps/hadoop/sbin
./start-all.sh
5.开启Hive之前需要保证Mysql启动。执行以下命令,查看Mysql的运行状态。(密码:zhangyu)
sudo service mysql status
6.输出显示Mysql未启动。执行以下启动命令。
sudo service mysql start
7.开启Eclipse,新建Java项目,名为hiveudf。
8.新建包,名为hive.udf。
9.新建类,名为YEAR。
10.右键单击项目名,新建文件夹,名为udfjar用于存放所需jar包,将/data/hive5/udfjar中的jar包全部导入到文件夹