【问题标题】:Apache Spark in yarn-cluster mode is throwing Hadoop FileAlreadyExistsException纱线集群模式下的 Apache Spark 抛出 Hadoop FileAlreadyExistsException
【发布时间】:2016-08-29 14:42:56
【问题描述】:

我正在尝试以 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)。在修复 FileAlreadyExistsException 后,作业因 Channel 关闭而失败,并使用参数 fs.hdfs.impl.disable.cache = true 修复。除了这些例外,我发现了许多已打开的错误。我从这些错误中找到了这些解决方法。我不知道这是正确的行为还是我遗漏了什么?

标签: java apache-spark hadoop-yarn


【解决方案1】:

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

这似乎是 Hadoop 的一个功能,通知用户指定的输出目录已经有一些数据,如果您将同一目录用于该作业的下一次迭代,它将丢失。

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

spark.hadoop.validateOutputSpecs = value of overwrite flag

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

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2017-08-30
    • 2016-04-09
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-12-23
    • 2014-12-10
    • 2018-10-25
    相关资源
    最近更新 更多