java.io.InvalidClassException:org.apache.spark.internal.io.HadoopMapReduceCommitProtocol;本地类不兼容

时间:2018-02-09 12:29:12

标签: java hadoop apache-spark cluster-computing

CONTEXT

我正在Spark群集上执行Spark工具(如果感兴趣,this是Spark工具)。该工具正在从HDFS读取输入文件,并将在HDFS中生成输出文件。

我有两个Azure VM,一个Spark Master容器,一个Namenode容器,两个Spark Worker容器和两个Datanode容器(更多两个容器提供该工具所需的文件,但我不认为它很重要),使用Docker Swarm配置。

这是我用来运行Spark工具的Bash命令:

/gatk/gatk BwaAndMarkDuplicatesPipelineSpark \
--input hdfs://namenode:8020/PFC_0028_SW_CGTACG_R_fastqtosam.bam \
--reference hdfs://namenode:8020/hg19-ucsc/ucsc.hg19.2bit \
--bwa-mem-index-image /reference_image/ucsc.hg19.fasta.img \
--disable-sequence-dictionary-validation true \
--output hdfs://namenode:8020/PFC_0028_SW_CGTACG_R_dedup_reads.bam \
-- --spark-runner SPARK --spark-master spark://$SPARK_MASTER_HOST:7077 \
--driver-memory 30g --executor-cores 4 --executor-memory 15g

问题

几个小时后我收到此错误:

18/02/08 23:10:42 WARN TaskSetManager: Lost task 15.0 in stage 5.0 (TID 3087, 10.0.0.10, executor 0): 
java.io.InvalidClassException: org.apache.spark.internal.io.HadoopMapReduceCommitProtocol; 
local class incompatible: stream classdesc serialVersionUID = -3240062154626659006, local class serialVersionUID = 8531775026770993759

甚至在Stack Overflow上搜索我发现这个issue具有类似的异常,它基本上建议添加这样的东西

   private static final long serialVersionUID = 6529685098267757690L;

在Java代码中。但我正在使用的Spark tool实际上是使用serialVerionUID,而且异常表明由org.apache.spark.internal.io.HadoopMapReduceCommitProtocol引发,它似乎扩展了Serializable,但没有使用serialVerionUID;我应该在Spark GitHub上打开一个问题并报告这个异常,还是我做错了什么?

很抱歉,如果过于冗长,如有必要,可以随时提供更多详细信息。

1 个答案:

答案 0 :(得分:0)

我试图检查Spark版本的Spark Master容器和Spark Worker容器,它分别是2.2.1和2.2.0

所以我在两者中使用了2.2.0,这次它起作用了。我假设问题是Worker和Master之间的版本不匹配(即使我第一次启动该工具时异常仅在执行了几个小时后才会引发)。