文档

JindoSDK访问OSS出现NoSuchUpload问题

更新时间:

本文介绍JindoSDK访问OSS出现NoSuchUpload问题的原因和解决方案。

问题详情

[RequestId]: 638xxxxxx [HostId]: oss-xxxx-internal.aliyuncs.com [ErrorMessage]: [E1010]HTTP/1.1 404 Not Found: <?xml version="1.0" encoding="UTF-8"?><Error> <Code>NoSuchUpload</Code> <Message>The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.</Message>

问题原因

当在EMR集群中遇到NoSuchUpload异常时,通常是因为多个并发作业在相同目录上进行操作,或者在某个Executor上无法访问由JindoSDK使用的临时目录所导致。

解决方案

  • SmartData 2.5.x以下和SmartData 3.6.x以下版本的JobCommitter存在问题,可能会导致部分作业出现此类报错,可尝试关闭JobCommitter。

  • 检查作业层面是否有并发操作了相同目录的情况,并尝试解决。

    如需并发操作,可以升级JindoSDK到4.6.4或以上版本,并设置fs.jdo.committer.allow.concurrent=truefs.jdo.committer.magic.abort.pending.uploads=false

    重要

    设置fs.jdo.committer.magic.abort.pending.uploads=false后,需要在OSS控制台设置好碎片过期策略,否则会产生不必要的费用。

  • 如果使用的JindoSDK是4.6.4及以下版本,需检查临时目录是否在集群所有节点上可写。

    如果运行Spark作业时遇到该问题,则以Spark客户端的设置为准。可升级JindoSDK到4.6.5及以上版本,或确保JindoSDK的临时目录在集群所有节点上可写,或选择使用默认的FileOutputCommitter。

  • 如果您之前使用的是Amazon EMR,且使用了Parquet格式,可以修改Spark配置。

    在EMR控制台,修改Spark服务中spark-defaults.conf页签下的参数spark.sql.parquet.output.committer.class,将该参数值修改为com.aliyun.jindodata.commit.JindoDirectCommitter。

    说明

    使用Direct Committer可能会引入数据一致性和完整性的问题。

  • 本页导读 (1)
文档反馈