Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 为什么elasticsearch spark 5.5.0在提交到纱线集群时会出现AbstractMethodError错误?_Apache Spark_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Apache Spark Sql_Apache Spark 2.2 - Fatal编程技术网 elasticsearch,apache-spark-sql,apache-spark-2.2,Apache Spark,elasticsearch,Apache Spark Sql,Apache Spark 2.2" /> elasticsearch,apache-spark-sql,apache-spark-2.2,Apache Spark,elasticsearch,Apache Spark Sql,Apache Spark 2.2" />

Apache spark 为什么elasticsearch spark 5.5.0在提交到纱线集群时会出现AbstractMethodError错误?

Apache spark 为什么elasticsearch spark 5.5.0在提交到纱线集群时会出现AbstractMethodError错误?,apache-spark,elasticsearch,apache-spark-sql,apache-spark-2.2,Apache Spark,elasticsearch,Apache Spark Sql,Apache Spark 2.2,我写了一个spark作业,主要目标是将其写入es并提交,问题是当我将其提交到spark集群时,spark会回馈我 [ERROR][org.apache.spark.deploy.warn.ApplicationMaster]用户类引发异常:java.lang.AbstractMethodError:org.elasticsearch.spark.sql.DefaultSource.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apach

我写了一个spark作业,主要目标是将其写入es并提交,问题是当我将其提交到spark集群时,spark会回馈我

[ERROR][org.apache.spark.deploy.warn.ApplicationMaster]用户类引发异常:java.lang.AbstractMethodError:org.elasticsearch.spark.sql.DefaultSource.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache/spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation; java.lang.AbstractMethodError:org.elasticsearch.spark.sql.DefaultSource.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache/spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation; 位于org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:472) 位于org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:48) 位于org.apache.spark.sql.execution.command.executeCommandExec.sideEffectResult$lzycompute(commands.scala:58) 位于org.apache.spark.sql.execution.command.executeCommandExec.sideEffectResult(commands.scala:56) 位于org.apache.spark.sql.execution.command.executeCommandExec.doExecute(commands.scala:74) 在org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:117)中


但是,如果我提交我的工作使用本地[2],工作结果就很好。奇怪的是,两个罐子的环境是相同的。我使用elasticsearch-spark20_2.11_5.5.0和spark2.2

似乎您面临Spark版本不匹配的问题,即使用
elasticsearch-spark20_2.11_5.5.0
(注意
spark20
)和Spark 2.2

引用以下文件的javadoc:

当应用程序尝试调用抽象方法时引发。通常,编译器会捕获此错误;仅当自上次编译当前执行的方法以来,某个类的定义发生了不兼容的更改时,才会在运行时发生此错误

这很好地解释了您的体验(注意以“此错误只能在运行时发生”开头的部分)

深入挖掘,堆栈跟踪中的这一行给出了您使用的Spark的确切版本,即Spark 2.2.0

org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:472)

这将为您提供问题“诞生”的确切位置(请参阅):

与堆栈跟踪中最上面的行匹配的:

java.lang.AbstractMethodError: org.elasticsearch.spark.sql.DefaultSource.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache/spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation; java.lang.AbstractMethodError: org.elasticsearch.spark.sql.DefaultSource.createRelation(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/immutable/Map;Lorg/apache/spark/sql/Dataset;)Lorg/apache/spark/sql/sources/BaseRelation

它看起来像elasticsearch-spark20_2.11_5.5.0连接器,但不知何故它没有实现该方法。既然Spark 2.0已经有了这个接口,那怎么可能呢?!让我们查找并查看
elasticsearch-spark20\u 2.11\u 5.5.0
的源代码

从堆栈跟踪中,您知道ES实现是。数据源确实是一个:

而且它确实覆盖了所需的方法(否则就不可能编译它,因为接口从1.3开始就存在了!)

方法和堆栈跟踪之间的唯一变化是
data:DataFrame
(在连接器和接口中)与
Lorg/apache/spark/sql/Dataset。这就引出了有关Spark应用程序中代码的问题,或者您将Spark应用程序提交到纱线簇的方式可能有错误(您确实将Spark应用程序提交到纱线簇,不是吗?)

我很困惑,但希望这个答案能让我们了解到底是什么导致了这一现象

dataSource.createRelation(sparkSession.sqlContext, mode, caseInsensitiveOptions, data)
private[sql] class DefaultSource ... with CreatableRelationProvider  {