このトピックでは、JindoSDK を使用して Object Storage Service (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 の CopyObject 操作に基づいて実装されています。このエラーは、CopyObject 操作に対する OSS の fastcopy 最適化が完了していないために発生します。その結果、JindoSDK の名前変更操作がタイムアウトします。
-
解決策
bucket.oss-cn-xxx-internal.aliyuncs.comの設定要件の確認、および内部 fastcopy 最適化の失敗原因のトラブルシューティングについては、OSS のテクニカルサポートにお問い合わせください。fastcopy 最適化は、ストレージクラスが標準である最も一般的なオブジェクトに対してのみ実行可能です。OSS オブジェクトのストレージクラスが標準でない場合、または OSS オブジェクトが特殊なタイプである場合、fastcopy 最適化が失敗することがあります。その結果、名前変更操作がタイムアウトすることもあります。JindoSDK を使用して一般的なオブジェクトのみを OSS にアップロードし、標準ストレージクラスを使用することを推奨します。次のオブジェクトでは fastcopy 最適化が失敗することがあります。
ストレージクラスが標準でないオブジェクト (低頻度アクセス、アーカイブ、コールドアーカイブなど)
OSS の AppendableObject タイプのオブジェクト
マルチパート以外の操作でアップロードされた小さなオブジェクト
サーバー側の暗号化などの機能を使用するオブジェクト
LINK、シンボリックリンク、削除マーカータイプなどの特殊なオブジェクト
例外スタックのエラーメッセージに 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 の SeekRead 操作には、Reached timeout エラーを引き起こす可能性のある不具合があります。 JindoData 4.0.0 を使用している場合は、JindoData を 4.3.X 以降のバージョンにアップグレードしてください。 詳細については、「新しい EMR コンソールで 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 が含まれる場合
原因
OSS バケットでバージョニングが有効になっています。
-
解決策
-
バケットでバージョニングが有効になっているか、または過去に有効になっていたかを確認します。OSS 管理コンソールで、対象のバケットに移動します。ナビゲーションウィンドウで [データセキュリティ] を選択し、[バージョニング] をクリックしてバージョニングのステータスを表示します。ステータスが [有効] または [中断] の場合、バケットでバージョニングが有効化されたことを示します。
-
OSS のテクニカルサポートに連絡し、バケットまたは指定されたパス内に 100,000 個を超える削除マーカーが存在するかどうかを確認してもらってください。存在する場合は、これらのマーカーを削除してください。
-
rm コマンド
skipTrash を含む rm コマンド
skipTrashオプションを含むrmコマンドは、2 つのステップで実行されます。getFileStatus操作が呼び出され、次にdelete操作が呼び出されます。skipTrashオプションを含むrmコマンドの実行時にタイムアウトエラーが発生した場合、そのエラーはgetFileStatus操作の呼び出し時に発生しています。 タイムアウトエラーを解決するには、「例外スタックのエラーメッセージに getFileStatus が表示される」に記載されている手順に従ってください。skipTrash を含まない rm コマンド
skipTrashオプションを含まないrmコマンドは、2 つのステップで実行されます。getFileStatus操作が呼び出され、次にRename操作が呼び出されます。skipTrashオプションを含まないrmコマンドの実行時にタイムアウトエラーが発生した場合は、例外スタックのエラーメッセージに getFileStatus が表示されるおよび例外スタックのエラーメッセージに rename が表示されるで説明されている指示に従ってエラーを修正してください。
skipTrash は rm コマンドのオプションです。たとえば、hadoop fs -rm -skipTrash oss://bucket/path コマンドを実行して OSS オブジェクトを削除できます。削除されたオブジェクトはごみ箱に移動されません。
ls コマンド
Is コマンドは 2 つのステップで実行されます。 getFileStatus オペレーションが呼び出され、次に listDirectory オペレーションが呼び出されます。 Is コマンドの実行時にタイムアウトエラーが発生する場合、それは getFileStatus オペレーションの呼び出し時に発生しています。 タイムアウトエラーを修正するには、「例外スタックのエラーメッセージに getFileStatus が表示される」をご参照ください。