关键字:Hive udf、SparkSQL udf、 第三方jar包
当在Hive和SparkSQL中使用的自定义UDF函数需要依赖第三方jar包时,可以将所有jar包通过类似于fatjar等插件打在一起,但显得太麻烦、太累赘了。
其实只需要在运行时候将依赖的第三方jar包和udf函数jar包一起添加到CLASSPATH这种即可;
这里的SparkSQL指整合了Hive的。
Hive中添加第三方JAR包
1:启用hive-cli时候,使用–auxpath选项指定要添加的jar包,多个jar包以逗号分隔:
./hive –auxpath /tmp/lxw1234/lucene-core-3.6.0.jar,/tmp/lxw1234/IKAnalyzer2012_u6.jar,/tmp/lxw1234/udf.jar
2:进入hive-cli之后,使用ADD JAR命令添加jar包(推荐):
ADD JAR file:///tmp/lxw1234/lucene-core-3.6.0.jar;
ADD JAR file:///tmp/lxw1234/IKAnalyzer2012_u6.jar;
ADD JAR file:///tmp/lxw1234/udf.jar;
如果jar包放在hdfs上,则路径前面不需要加文件系统标识。
特别注意:这两种方式添加jar包时候,需要注意jar包的顺序,比如上面udf.jar中引用了IKAnalyzer2012_u6.jar中的类,而IKAnalyzer2012_u6.jar中引用了lucene-core-3.6.0.jar中的类,必须按照依赖顺序添加,否则还是会找不到类。
我测了如此。
3:其他方式,比如配置hive.aux.jars.path参数等都不推荐。
SparkSQL中添加第三方JAR包
1:如果udf jar包中没有引用第三方jar包,那么可以通过ADD JAR的方式添加;
2:如果udf jar包中引用了第三方jar包,那么使用ADD JAR添加时候仍然会报错找不到类(我测试如此)。
这时候需要通过spark-sql命令的–jars选项来指定:
./spark-sql –jars /tmp/lxw1234/lucene-core-3.6.0.jar,/tmp/lxw1234/IKAnalyzer2012_u6.jar,/tmp/lxw1234/udf.jar –master spark://lxw1234.com:7077
如果觉得本博客对您有帮助,请 赞助作者 。