gpt4 book ai didi

scala - Spark RDD 方法 "saveAsTextFile"抛出异常 即使在删除输出目录后也是如此。 org.apache.hadoop.mapred.FileAlreadyExistsException

转载 作者:行者123 更新时间:2023-12-02 11:04:33 25 4
gpt4 key购买 nike

我在 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/

日志:

16/07/07 11:27:47 INFO BlockManagerMaster: BlockManagerMaster stopped
16/07/07 11:27:47 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
16/07/07 11:27:47 INFO SparkContext: Successfully stopped SparkContext
16/07/07 11:27:47 INFO ApplicationMaster: Unregistering ApplicationMaster with FAILED (diag message: User class threw exception: **org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory s3a://bi-aws-users/sbatheja/PRD/PriceEngineOutput already exists)**
16/07/07 11:27:47 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
16/07/07 11:27:47 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.
16/07/07 11:27:47 INFO AMRMClientImpl: Waiting for application to be successfully unregistered.
16/07/07 11:27:47 INFO RemoteActorRefProvider$RemotingTerminator: Remoting shut down.
16/07/07 11:27:47 INFO ApplicationMaster: Deleting staging directory .sparkStaging/application_1467889642439_0001
16/07/07 11:27:47 INFO ShutdownHookManager: Shutdown hook called
16/07/07 11:27:47 INFO ShutdownHookManager: Deleting directory /mnt/yarn/usercache/hadoop/appcache/application_1467889642439_0001/spark-7f836950-a040-4216-9308-2bb4565c5649

它会在该位置创建“_temporary”目录,其中包含空零件文件。

最佳答案

总而言之,一句话:
确保spark-corescala-library的scala版本一致。

<小时/>

我也遇到了同样的问题。当我将文件保存到 HDFS 时,它抛出异常:org.apache.hadoop.mapred.FileAlreadyExistsException
然后我检查了HDFS文件目录,有一个空的临时文件夹:TARGET_DIR/_temporary/0

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

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;

然后该作业将重试并重新执行。这时候,job重新执行,就会发现刚才的目录已经被创建了。并且还抛出目录已经存在。

经确认第一个错误是版本兼容性问题。Spark版本为2.1.0,对应的spark-core scala版本为2.11scala-library > scala版本的依赖是2.12.xx

当改变的两个scala版本一致时(一般是修改scala-library版本),就可以解决第一个异常问题,然后job就可以正常FINISHED.
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>

关于scala - Spark RDD 方法 "saveAsTextFile"抛出异常 即使在删除输出目录后也是如此。 org.apache.hadoop.mapred.FileAlreadyExistsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com