写入配置单元分区时,Spark暂存目录竞争条件?

问题描述 投票:3回答:1

[尝试将数据集写入配置单元表中的分区时遇到间歇性异常。

Caused by: org.apache.hadoop.fs.FileAlreadyExistsException: /user/hive/warehouse/devl_fr9.db/fr9_ftdelivery_cpy_2_4d8eebd3_9691_47ce_8acc_b2a5123dabf6/.spark-staging-d996755c-eb81-4362-a393-31e8387104f0/date_id=20180604/part-00000-d996755c-eb81-4362-a393-31e8387104f0.c000.snappy.parquet for client 10.56.219.20 already exists

如果我检查HDFS,则相关路径不存在。我只能假设这是有关临时登台文件的某些竞争条件。我正在使用Spark 2.3

apache-spark hive apache-spark-sql
1个回答
0
投票

此问题的可能原因是,在作业执行期间,任务开始将数据写入该文件而失败。

[当任务失败时,它已经写入的数据由Spark(至少在2.3和2.4中确认)是not deleted/purged。因此,当其他执行者尝试重新执行失败的任务时,它将尝试写入具有相同名称的文件,并且您将获得FileAlreadyExistsException。

在您的情况下,已经存在的文件称为part-00000-d996755c-eb81-4362-a393-31e8387104f0.c000,因此stderr中可能有一条日志消息,指示任务00000 由于失败而丢失,类似于[]

WARN TaskSetManager: Lost task **00000** in stage...

如果解决了此失败的原因-如果问题是间歇性的,则可能是OutOfMemoryError-FileAlreadyExistsException可能会得到解决,因为该任务不会失败并且不会留下临时文件。

© www.soinside.com 2019 - 2024. All rights reserved.