本文介绍JindoSDK访问OSS出现InvalidArgument Part number问题的原因和解决方法。

问题详情

ErrorMessage : [RequestId]: 62DC30C7F31FA339346B57B2 [HostId]: oss-cn-beijing-internal.aliyuncs.com [ErrorMessage]: [E1010]HTTP/1.1 400 Bad Request: InvalidArgument Part number must be an integer between 1 and 10000, inclusive. 62DC30C7F31FA339346B57B2 xxx.oss-cn-beijing-internal.aliyuncs.com PartNumber 10001 ERROR_CODE : 1010

问题原因

分块(Part)数量超出支持范围。JindoSDK默认使用MultiPartUpload方式上传文件到OSS,OSS最多支持10000个Part。

解决方法

  • JindoSDK/JindoData 4.3.0版本(EMR-3.40.0或EMR-5.6.0版本集群)JindoMagicCommitter存在缺陷,导致Part使用过快。您可以选择以下任意一种方式进行以下修复:
  • 目前JindoSDK默认最大支持80 GB文件写入。一般情况Spark或Hive作业不会写入超过80 G的文件,可能是作业出现数据倾斜导致文件超大,建议您进行作业调参或优化规避数据倾斜问题。
  • JindoSDK 4.5.2 (EMR-3.43.1或EMR-5.9.1) 及以上版本支持配置fs.oss.blocklet.size.mb进行调整,默认为8。由于Part最多为10000个,因此写入文件不能超过80 GB。如果有个别文件超过80 GB,建议根据文件大小单独调大本配置,并同时调大请求OSS的超时时间。如文件大小未知或远大于80 GB(例如,超过160 GB),建议考虑使用OSS-HDFS(无文件大小限制)。