近期由于生产环境ES集群升级,由5.5.0升级为6.4.3
原SparkStreaming访问ES使用elasticsearch-hadoop依赖中EsSpark.saveJsonToEs写入数据。
将elasticsearch-hadoop依赖包升级为对应6.x版本后esMap添加Xpack参数:
es.nodes
es.port
es.mapping.id
es.net.http.auth.user
es.net.http.auth.pass
本地调试读写均正常,但在提交yarn集群运行后,查看日志出现EsHadoopIllegalArgumentException:Unsupported/Unknown Elasticsearch version 6.4.3异常,通过hadoop页面查看Spark运行Environment,发现Classpath Entries中有以下几个旧版ES包,但编译的程序中并没有使用到这几个包。
elasticsearch-5.5.0.jar
elasticsearch-spark-20_2.11-5.5.0.jar
elasticsearch-rest-client-5.5.0.jar
返回Spark客户端jars中查看,果不其然有它叁,这是由于Spark任务提交集群时会默认将jars目录下jar包一起上传到各Executor,虽然代码中没有用到这几个包,但是Spark在初始化环境时sparkconf中有ES参数,则会调用这3个包进行初始化,从而导致版本不兼容出现该异常。
解决方案:
在maven库https://mvnrepository.com/artifact/com.aliyun中下载对应版本jar包替换到SPARK_HOME/jars后重新提交任务,解决。