1.编写UDF
1)使用idea+maven,在maven中添加相关参数
要引入 hadoop-client hive-exec
以下是我的 maven:
1 | <?xml version="1.0" encoding="UTF-8"?> |
2)创建一个类,并编写一个UDF名字叫 HelloUDF.java
首先HelloUDF继承UDF这个类,然后重写 evaluate ()方法
1 | package com.ruozedata.hadoop.UDF; |
2、下载源码
1 | wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0-src.tar.gz |
3、在源码中修改
1)添加helloUDF.java
1 | 将HelloUDF.java 放入 /home/source/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/udf 文件夹中 |
2)修改FunctionRegistry.java 文件
1 | vi /home/source/hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java |
4、编译Hive源码
1 | $>cd $HIVE_HOME |
编译成功
重新编译的包默认为:
1 | /home/hadoop/source/hive-1.1.0-cdh5.7.0/packaging/target/apache-hive-1.1.0-cdh5.7.0-bin |
5、部署
(重新部署 或者 只将 编译后的hive-exec-1.1.0-cdh5.7.0.jar 放到原来hive部署的位置即可。两种方式都可以!!)
5.1 在编译后的文件中找到 jar,并将原来的jar 替换。
1 | [hadoop@hadoop001 lib]# pwd |
5.2 重新解压部署
详情请看我的博客:https://skygzx.github.io/2019/04/07/Hive%E7%9A%84%E9%83%A8%E7%BD%B2/#more
6、测试:
1 | hive (d6_hive)> show functions; |
1 | hive (d6_hive)> select cdn,helloudf("ruoze") from g6_access limit 10; |