上下文
我正在一个Spark簇上执行一个Spark工具(如果有兴趣,这是Spark工具)。该工具正在从hdfs读取一个输入文件,并将在hdfs中生成一个输出文件。
我有2个azure vm,带有一个spark主容器、一个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
即使在这里搜索堆栈溢出,我也发现了类似的问题,它基本上建议添加这样的内容
private static final long serialVersionUID = 6529685098267757690L;
在java代码中。但是我正在使用的spark工具实际上使用的是serialveriouid,而且异常表明是由org.apache.spark.internal.io.hadoopmapreducecommitprotocol提出的,它似乎扩展了serializable,但是没有使用serialveriouid;我应该在spark github上打开一个问题并报告这个异常,还是我做错了什么?
抱歉如果太啰嗦,如有必要更多细节请随时询问。
1条答案
按热度按时间qzlgjiam1#
我试着检查spark master container和spark worker container的spark版本,分别是2.2.1和2.2.0
所以我在这两个版本中都使用了2.2.0,这次成功了。我假设问题是worker和master之间的版本不匹配(即使我第一次启动工具时,只有在执行了几个小时之后才会引发异常)。