Spark的guava jar包版本冲突导致获取Elasticsearch连接失败

Spark集成Elasticsearch,在local下正常运行,提交到集群运行jar出现异常:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 3.0 failed 4 times, most recent failure: Lost task 0.3 in stage 3.0 (TID 10, 172.16.14.32): java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool

 

Spark的guava jar包版本冲突导致获取Elasticsearch连接失败_第1张图片

 

 

经定位,发现是由于spark集群运行时默认加载$spark_home/jars下的guava-14.0.1.jar版本的包,而Elasticsearch使用的是guava-18.0.jar版本,提交到集群运行时,guava-14.0.1.jar版本覆盖掉了Elasticsearch中的guava-18.0.jar版本,造成java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool 异常。

 

解决方式参考:https://blog.csdn.net/u010454030/article/details/70054822

博主所写的资料

 

1 在每个spark节点的相同目录下上传Elasticsearch的guava-18.0.jar包

 

2 spark-submit提交jar到集群时添加参数指定加载guava-18.0.jar包:

 

spark-submit --class mytest.MytestApp --master spark://mytest01:7077 --executor-memory 1G --driver-memory 1G  --total-executor-cores 1 --driver-class-path /home/guava-18.0.jar --driver-library-path /home/guava-18.0.jar --conf spark.executor.extraClassPath=/home/guava-18.0.jar --conf spark.executor.extraLibraryPath=/home/guava-18.0.jar --deploy-mode cluster /home/MytestApp.jar

成功解决Spark创建Elasticsearch连接异常。

注:本次运行的MytestApp.jar是maven工程包,是将所有依赖都打包到同一个jar里提交到Spark集群运行,jar比较大;最好换成依赖包和应用代码分离的方式提交到spark集群中运行。

再次感谢https://blog.csdn.net/u010454030/article/details/70054822

 博主。

 

 

 

 

 

 

 

你可能感兴趣的:(笔记)