Scala 火花RDD法;saveAsTextFile";即使在删除输出目录后仍引发异常。org.apache.hadoop.mapred.filealreadyexistException

Scala 火花RDD法;saveAsTextFile";即使在删除输出目录后仍引发异常。org.apache.hadoop.mapred.filealreadyexistException,scala,amazon-web-services,apache-spark,rdd,emr,Scala,Amazon Web Services,Apache Spark,Rdd,Emr,我在一个RDD[String]上调用这个方法,参数中有目标。(斯卡拉) 即使在开始之前删除了目录,进程也会出现此错误。 我在EMR集群上运行这个过程,输出位置在aws S3。 下面是使用的命令: spark-submit --deploy-mode cluster --class com.hotwire.hda.spark.prd.pricingengine.PRDPricingEngine --conf spark.yarn.submit.waitAppCompletion=true --nu

我在一个RDD[String]上调用这个方法,参数中有目标。(斯卡拉)

即使在开始之前删除了目录,进程也会出现此错误。 我在EMR集群上运行这个过程,输出位置在aws S3。 下面是使用的命令:

spark-submit --deploy-mode cluster --class com.hotwire.hda.spark.prd.pricingengine.PRDPricingEngine --conf spark.yarn.submit.waitAppCompletion=true --num-executors 21 --executor-cores 4 --executor-memory 20g --driver-memory 8g --driver-cores 4 s3://bi-aws-users/sbatheja/hotel-shopper-0.0.1-SNAPSHOT-jar-with-dependencies.jar -d 3 -p 100 --search-bucket s3a://hda-prod-business.hotwire.hotel.search --prd-output-path s3a://bi-aws-users/sbatheja/PRD/PriceEngineOutput/
日志:

它会在位置中创建“\u临时”目录,其中包含空零件文件。

简而言之,一个词:
确保
spark core
scala库的scala版本一致。


我遇到了同样的问题。 当我将文件保存到HDFS时,它抛出一个异常:
org.apache.hadoop.mapred.filealreadyexistException

然后我检查了HDFS文件目录,有一个空的临时文件夹:
TARGET\u DIR/\u temporary/0

您可以提交作业,打开详细配置:
/spark submit--verbose
。 然后查看完整的上下文和日志,肯定会导致其他错误。 我的作业处于运行状态,将抛出第一个错误:

17/04/23 11:47:02 ERROR executor.Executor: Exception in task 1.0 in stage 0.0 (TID 1)
java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;
然后重试并重新执行作业。此时,作业重新执行时,会发现刚刚创建了目录。并抛出已存在的目录

确认第一个错误是版本兼容性问题后。 spark版本是
2.1.0
,对应的
spark core
scala版本是
2.11
,scala版本的
scala库
依赖关系是
2.12.xx

当两个scala版本的更改一致时(通常修改
scala库
版本),您可以解决第一个异常问题,然后作业可以正常
完成

pom.xml
示例:

<!-- Spark -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.1.0</version>
</dependency>
<!-- scala -->
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.7</version>
</dependency>

org.apache.spark
spark-core_2.11
2.1.0
org.scala-lang
scala图书馆
2.11.7

运行作业之前,是否确定文件夹不存在?你为什么使用
s3a
而不是
s3
s3n
?是的,我先删除了目录。基本原因是s3支持5gb,s3a没有这样的限制。也尝试过s3。同样的问题:(可能您的问题是代码中的其他地方出现了故障,这就是为什么会出现临时文件,并且您有一些重试机制,尝试再次运行代码,然后失败,因为上一次尝试和剩余的目录已经存在?是否有可能您多次保存到同一地址?也是在失败之后,登录到hdfs并检查目录中的内容,然后找出您所处的步骤。实际上,我在整个过程中只向文件写入了一次,这也是最后一步。这可能与s3目录结构有关吗?
<!-- Spark -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.1.0</version>
</dependency>
<!-- scala -->
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.7</version>
</dependency>