1)hive UDF 最好不要定义构造函数,因为构造函数中的一些资源初始化工作(如读取外部资源),会导致错误信息:FAILED: RuntimeException java.lang.reflect.InvocationTargetException,资源初始化的功能最好在evaluate函数中执行(通过标记的方法保证只执行一次)
2)在开发的hive UDF中,有时候需要使用到第三方jar包,一般的做法是把第三方jar包和udf一起打包,结果在测试udf时,hive报错:java.lang.ClassNotFoundException
解决办法:
1)在运行hive hql时,手动将udf所需要的jar包 通过add语句 添加(测试通过);
2)将udf所需要的jar包 手动分发到 hadoop集群的所有服务器上hadoop的lib目录下
3)安装eclipse 插件:fatjar (测试通过)
Fat Jar 打包方法:
1)创建META-INF文件夹,在该文件夹中创建:MANIFEST.MF文件,在文件中输入:Manifest-Version: 1.0
2)使用FAT JAR插件打包: