正文
Step1
首先,我们创建一个目录 udf_test/;
创建子目录org/dennis/udf
在子目录里创建一个MyUpper.java文件。里面内容为:
Step2
|
|
这里我们要把依赖的jar包写进来,这里我们依赖hive-exec*.jar 以及 hadoop-common.jar
- javac -cp 的作用 12345javac -cp 指明了.java文件里import的类的位置java -cp 指明了执行这个class文件所需要的所有类的包路径-即系统类加载器的路径(涉及到类加载机制)路径在linux中用:隔开 在windows中用;隔开
Step3
生成一个jar文件。
Step4
第一种方式
进入Hive命令行
搞定!
第二种方式
另外,也可以在Hue上点击 setting后,上传对应的jar文件,然后将对应的function name 和 class name也填一下就OK了。
然后再Hue上执行create temporary function dennisUpper as 'org.dennis.udf.MyUpper';
注册下对应信息。
Step5
执行SQL,检验一下:
常见问题
找不到类
有时候我们add jar后,create function时候会出现如下报错:
我们可以解压一下jar包检查下:
如果有的话,check_dir下应该是有这么一个目录文件:org/dennis/udf/MyUpper.class
reload更新的jar包
我们更新了UDF,重新打个jar包替换掉原来的。但如果要让它生效需要做一些操作:
added a config in hive-site.xml, then restart the hive server.
1234<property><name>hive.reloadable.aux.jars.path</name><value>/user/hive/udf</value></property>deleted the old jar file in HDFS, and upload the new jar file.
DROP TEMPORARY FUNCTION IF EXISTS isstopword;
in hive console, run
list jar;
to check the local jar files, it would print something like this:
/tmp/83ce8586-7311-4e97-813f-f2fbcec63a55_resources/isstopwordudf.jar
then delete them in your server file system.
- create a temp function again.
create temporary function isstopword as ‘org.dennis.udf.IsStopWord’;
Reference
http://bdlabs.edureka.co/static/help/topics/cm_mc_hive_udf.html#concept_zb2_rxr_lw_unique_1