JindoSDK が Object Storage Service (OSS) にアクセスすると、以下のエラーが返される場合があります。
[ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [ErrorMessage]: [E1008]Reached timeout=30000ms
このエラーだけでは、根本原因を特定するには不十分です。例外スタックまたはコンテキストログを確認して、シナリオに一致するキーワードを見つけ、対応する解決策に従ってください。
例外スタックのシナリオ
例外スタック内の 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 の CopyObject 操作を呼び出すことで rename を実装します。CopyObject 操作に対する OSS fastcopy 最適化が完了していない場合、JindoSDK の Rename 操作がタイムアウトします。
Fastcopy 最適化は、以下のオブジェクトタイプには適用されません。
-
ストレージクラスが標準ではないオブジェクト (低頻度アクセス (IA)、Archive、コールドアーカイブなど)
-
OSS 内の AppendableObject タイプオブジェクト
-
マルチパートアップロードなしでアップロードされた小さなオブジェクト
-
サーバ側暗号化を使用するオブジェクト
-
特殊なオブジェクトタイプ: LINK、SYMLINK、DELETEMARKER
解決策
例外スタック内の InputStream または Read
エラー例
Read from oss://xxxx with error message: [HostId]: oss-cn-zhangjiakou-internal.aliyuncs.com [ErrorMessage]: [E1008]Reached timeout=30000ms
原因と解決策
このエラーには、2つの考えられる原因があります。
-
JindoData 4.0.0 SeekRead の欠陥: JindoData 4.0.0 の SeekRead 操作の欠陥がこのエラーを引き起こす可能性があります。JindoData を 4.3.X 以降にアップグレードしてください。アップグレード手順については、「新しい EMR コンソールでの EMR クラスターの JindoSDK のアップグレード」をご参照ください。
-
OSS 帯域幅調整: 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)
または:
原因: java.io.IOException: ストリームのクローズ失敗: oss://xxx エラー java.io.IOException: [エラーコード] : 25201 , [エラー種別]: OSS オペレーションエラー。 [ホスト ID]: xxx [エラーメッセージ]: [E1008] タイムアウトに達しました (30000 ms) @xxx エラーコード : 1008
原因
OSS 帯域幅調整がトリガーされています。
解決策
OSS テクニカルサポートテクニカルサポートテクニカルサポートテクニカルサポート に連絡し、帯域幅調整がトリガーされた理由を確認してください。
例外スタック内の getFileStatus
原因
OSS バケットでバージョン管理が有効になっています。
解決策
コマンドによってトリガーされるシナリオ
rm コマンド
rm コマンドは、-skipTrash オプションが使用されているかどうかに応じて、動作が異なります。
-skipTrash オプションは、オブジェクトをゴミ箱に移動せずに完全に削除します。例: hadoop fs -rm -skipTrash oss://bucket/path。-skipTrash を使用する場合
このコマンドは getFileStatus を呼び出し、次に delete を呼び出します。タイムアウトが発生した場合、それは getFileStatus の呼び出しに起因します。詳細については、「例外スタック内の getFileStatus」をご参照ください。
-skipTrash を使用しない場合
このコマンドは getFileStatus を呼び出し、次に rename を呼び出します。タイムアウトが発生した場合、それはどちらかの呼び出しに起因する可能性があります。詳細については、「例外スタック内の getFileStatus」および「例外スタック内の rename」をご参照ください。
ls コマンド
ls コマンドは getFileStatus を呼び出し、次に listDirectory を呼び出します。タイムアウトが発生した場合、それは getFileStatus の呼び出しに起因します。詳細については、「例外スタック内の getFileStatus」をご参照ください。
