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插件打包: