Hive和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

猜你喜欢

转载自blog.csdn.net/mnasd/article/details/81668927
今日推荐