yarn-cluster 模式下的 Apache Spark 抛出 Hadoop FileAlreadyExistsException

Apache Spark in yarn-cluster mode is throwing Hadoop FileAlreadyExistsException

我正在尝试在 yarn-cluster 模式下执行我的 Spark 作业。它在独立和 yarn-client 模式下工作正常,但在集群模式下它在 pairs.saveAsTextFile(output);

处抛出 FileAlreadyExistsException

这是我的作业实现:

SparkConf sparkConf = new SparkConf().setAppName("LIM Spark PolygonFilter").setMaster(master);  
        JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);            
        Broadcast<IGeometry> boundryBroadCaster = broadcastBoundry(javaSparkContext, boundaryPath);         
        JavaRDD<String> file = javaSparkContext.textFile(input);//.cache();     
        JavaRDD<String> pairs = file.filter(new FilterFunction(params , boundryBroadCaster));
        pairs.saveAsTextFile(output);

根据日志,它适用于一个节点,然后它开始为所有节点的其余部分抛出此异常。

谁能帮我解决一下...?谢谢

禁用输出规范后它正在工作:(spark.hadoop.validateOutputSpecs=true)。

这看起来像是 Hadoop 的一个功能,可以通知用户指定的输出目录已经有一些数据,如果您将在此作业的下一次迭代中使用相同的目录,这些数据将会丢失。

在我的应用程序中,我为作业提供了一个额外的参数 - -overwrite,我们这样使用它:

spark.hadoop.validateOutputSpecs = value of overwrite flag

如果用户想要覆盖现有的输出,他可以提供 "overwrite" 标志的值为 true。