本文介绍JindoSDK访问OSS出现Reached timeout问题的解决方法。
具体报错
[ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [ErrorMessage]: [E1008]Reached timeout=30000ms
解决思路
说明 单独的超时异常无法排查,一般是OSS服务端没有返回,需要查看上下文日志或异常栈。
异常栈有Rename字样
- 异常示例
java.io.IOException: rename src:oss://bucket.oss-cn-xxxx-internal.aliyuncs.com/user/hive/warehouse/tmp/hive/xxxx/c185ce78-f843-4104-8dca-f5b96fc9****/hive_xxxx_00-07-51_265_5593904247532586093-47957/_tmp.-mr-10006, dst:oss://bucket.oss-cn-xxxx-internal.aliyuncs.com/user/hive/warehouse/tmp/hive/xxx/c185ce78-f843-4104-8dca-f5b96fc9****/hive_xxxx-07-21_00-07-51_265_5593904247532586093-47957/_tmp.-mr-10006.moved ,java.io.IOException: [ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [ErrorMessage]: [E1008]Reached timeout=30000ms @100.118.xx.xx:80 ERROR_CODE : 1008
- 异常原因
JindoSDK的OSS Rename基于OSS CopyObject实现,此异常通常是CopyObject没能进行OSS内部的fastcopy优化,导致JindoSDK的rename超时。
- 解决方法:
可联系OSS的 技术支持, 确认
bucket.oss-cn-xxx-internal.aliyuncs.com
设置要求,排查OSS内部的fastcopy优化失效原因。例如:- OSS Bucket默认存储类型不是标准存储。
如果存储类型不是标准存储,可能会导致OSS内部的fastcopy优化失效。DataLake的Bucket默认要使用标准类型。
- 设置了KMS。
如果Bucket设置了默认加密策略,可能会导致OSS内部的fastcopy优化失效。
- OSS Bucket默认存储类型不是标准存储。
异常栈有InputStream或Read字样
- 异常示例
Read from oss://xxxx with error message: [HostId]: oss-cn-zhangjiakou-internal.aliyuncs.com [ErrorMessage]: [E1008]Reached timeout=30000ms
- 异常原因和解决方法
- JindoData 4.0.0版本的Seek Read存在缺陷,如果您使用的是该版本,请将JindoData升级到4.3.x及以上版本,详情请参见EMR集群JindoSDK升级流程(新版控制台)。
- 触发了OSS的带宽流控,可联系OSS技术支持查看流控原因。
异常栈有OutputStream、Write或Close字样
- 异常示例
或com.aliyun.emr.fs.oss.commit.magic.JindoOssMagicOutputStream.write(JindoOssMagicOutputStream.java:146) ... 14 more Caused by: java.io.IOException: ErrorCode : 25201 , ErrorMsg: OSS Op Error. [HostId]: oss-cn-beijing-internal.aliyuncs.com [ErrorMessage]: [E1008]Reached timeout=30000ms @100.118.xx.xx:80 ERROR_CODE : 1008 at com.alibaba.jboot.JbootFuture.get(JbootFuture.java:179) at com.alibaba.jboot.JbootOssWriter.write(JbootOssWriter.java:85)
Caused by: java.io.IOException: Close stream oss://xxx error java.io.IOException: [ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [HostId]: xxx [ErrorMessage]: [E1008]Reached timeout=30000ms @xxx ERROR_CODE : 1008
- 异常原因和解决方法
通常是触发了OSS的带宽流控,可联系OSS技术支持查看流控原因。
异常栈有getFileStatus字样
- 异常原因
通常是由于Bucket打开了多版本功能。
- 解决方法
- 需确认是否打开或曾经打开过多版本功能。
- 联系OSS技术支持,确认该Bucket或路径下是否有10万以上的DeleteMarker,如果有则需要进行清理。
- 需确认是否打开或曾经打开过多版本功能。
rm命令
- rm命令带skipTrash
该命令内部会有两个执行阶段,首先会执行getFileStatus操作,然后执行delete操作。如果执行该命令出现超时问题,超时主要发生在命令内部的getFileStatus阶段,您可以通过解决getFileStatus超时的方法,解决该命令的超时问题,详情请参见上文异常栈有getFileStatus字样。
- rm命令不带skipTrash
该命令内部会有两个执行阶段,首先会执行getFileStatus操作,然后执行Rename操作。如果执行该命令出现超时问题,您可以通过getFileStatus和Rename解决超时的方法,解决该命令超时问题,详情请参见上文异常栈有getFileStatus字样和异常栈有Rename字样。
说明 skipTrash是rm命令的选项,例如
hadoop fs -rm -skipTrash oss://bucket/path
表示直接删除,删除文件不会进入回收站。
ls命令
ls命令内部会有两个执行阶段,首先会执行getFileStatus操作,然后执行listDirectory操作。如果执行ls命令出现超时问题,超时主要发生在内部的getFIleStatus阶段,可以通过getFIleStatus解决超时的方法,解决ls命令超时问题,详情请参见上文异常栈有getFileStatus字样。