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

5

背景

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

我有两个Azure虚拟机,其中包含一个Spark Master容器、一个Namenode容器、两个Spark Worker容器和两个Datanode容器(还有两个容器用于提供工具所需的文件,但我认为这并不重要),通过Docker Swarm进行设置。

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

/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上搜索, 我找到了一个类似的问题,它基本上建议添加类似以下内容的代码:

   private static final long serialVersionUID = 6529685098267757690L;

在Java代码中,我使用的Spark工具实际上使用了serialVersionUID,然而异常提示是由org.apache.spark.internal.io.HadoopMapReduceCommitProtocol引发的,它似乎扩展了Serializable,但没有使用serialVersionUID。我应该在Spark GitHub上开一个问题并报告这个异常吗?还是我做错了什么?如果需要更多细节,请告诉我。
1个回答

2
我尝试检查Spark Master容器和Spark Worker容器的Spark版本,分别为2.2.1和2.2.0。因此,我在两个容器中都使用了2.2.0版本,这次成功了。我认为问题是Worker和Master之间版本不匹配(即使第一次启动工具后,异常也是在执行几个小时后引发的)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接