我正在开发一个从spark 1.6(scala 2.10.5)迁移到spark 2.1(scala 2.11.8)的应用程序。 我必须在很短的时间内进行迁移,所以我试图更改使该应用程序正常工作所必需的一切。
我一直使用 org.apache.spark.rdd.RDD API,而不是切换到 org.apache.spark.sql.SparkSession ,因为我能够对其进行编译然后像这样运行它。
我的应用程序可以正常运行,并产生与以前完全相同的输出,但是我有一个问题。通过rdd.saveAsHadoopFile(outputPath,...)方法保存输出时,我收到一条错误消息,指出outputPath已经存在。 我确信这不是真的,因为我在启动代码之前删除了输出目录。
奇怪的是,仍会创建输出,并且完全按照原样创建输出,但是每次都会出现错误,并且我的spark作业日志将失败,这是我想避免的。
另一个有趣的事情是,仅当我在集群模式下运行作业时才出现此错误(例如): 火花提交 ... -母纱 -部署模式集群
,但是当我在客户端模式下运行它时却不这样: 火花提交... -母纱 --deploy-mode客户端
另一点是,群集模式下的同一作业设法通过rdd.saveAsTextFile(outputPath)方法创建文件,而不会产生任何错误。
我想以群集模式运行该应用程序并消除错误消息。 预先感谢您的每一个建议!