このトピックでは、ossimportを使用するときによくある質問やよくあるエラーに対する回答を提供します。
注
このトピックで言及されているすべてのossimportコマンドは短縮されます。 実際のシナリオでは、コマンドの完全な形式を使用する必要があります。
Windowsコマンド用のconsole.batを追加します。 たとえば、submitをconsole.bat submitに変更します。
Linuxコマンド用にbash console.shを追加します。 たとえば、submitをsudo bash console.sh submitに変更します。
ossimportを使用してデータが移行されるかどうかを確認する方法?
完全なデータ移行が完了したら、次のコマンドを実行してタスクの状態を表示できます。
Windowsの場合、コマンドプロンプトでconsole.bat statを実行します。
Linuxの場合、sudo bash console.sh statを実行します。
移行タスクがSucceed状態の場合、移行は成功です。
ジョブに対してisIncrementalをtrueに設定した場合、ossimportは指定された間隔でソースディレクトリを定期的にスキャンし、新しいファイルまたは変更されたファイルをチェックし、増分データをObject Storage Service (OSS) に同期します。 対応するOSSバケットで増分オブジェクトを表示できます。
ossimportは移行後にデータを検証しないため、データの一貫性と整合性は保証されません。 移行タスクが完了したら、移行元と移行先のデータの整合性を確認します。
ソースと宛先間のデータの整合性を確認せずにソースデータを削除した場合、損失や結果が発生した場合に責任を負います。
一般的な移行の失敗
移行ジョブが失敗した場合は、移行失敗ログを表示して原因を特定することを推奨します。 移行の問題を解決したら、retryコマンドを実行してファイルを再度移行できます。 失敗ログファイルのパスは、master/jobs/${JobName}/failed_tasks/${TaskName}/audit.logです。
statコマンドは、"failed" ジョブ状態を返します。
次のコマンドを実行して、ジョブのステータスを確認します。
sudo bash console.sh stat
JobStateパラメーターの値がfailedの場合、移行ジョブは失敗しました。
解決策: 移行ジョブが完了したら、retryコマンドを実行してジョブを再試行します。
いくつかのファイルの移行に失敗し、移行の再試行も失敗します。
解決策:
master/jobs/${JobName}/failed_tasks/${TaskName}/error.listファイルで、失敗したファイルへの相対パスを確認します。
ファイルにアクセスする権限があるかどうか、ファイルが削除されているかどうか、ファイルがシンボリックリンクであるかどうか、およびファイル名が文字化けしているかどうかを確認します。
上記の問題を解決したら、retryコマンドを実行してファイルを再度移行します。
「アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。」エラーメッセージが移行失敗ログに含まれています。
例外: com.aliyun.oss.OSSException: アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。 Please send all future requests to this endpoint.
<Error>
<Code>AccessDenied</Code>
<Message>The bucket you are attempting to access must be addressed using the specified endpoint. 将来のすべてのリクエストをこのエンドポイントに送信してください。</Message>
<RequestId>56EA98DE815804**21B23EE6</RequestId>
<HostId>my-oss-bucket.oss-cn-qingdao.aliyuncs.com</HostId>
<Bucket>my-oss-bucket</Bucket>
<Endpoin t>oss-cn-hangzhou.aliyuncs.com</Endpoint>
</エラー>
原因: srcDomainまたはdestDomainパラメーターの値が無効です。
解決策: 有効なエンドポイントを指定します。 詳細は、「リージョンとエンドポイント」をご参照ください。
「計算したリクエスト署名が指定した署名と一致しません。」エラーメッセージは、移行失敗ログに含まれています。The request signature does not match The signature you provided.
例外: com.aliyun.oss.OSSException: 計算したリクエスト署名が、指定した署名と一致しません。 Check your key and signing method.
[エラーコード]: SignatureDoesNotMatch
[RequestId]: xxxxxxx
[HostId]: xxx.oss-cn-shanghai.aliyuncs.com
原因: destAccessKeyまたはdestSecretKeyパラメーターの値が無効です。
解決策: 有効なAccessKeyペアを入力します。
バケット名 "xxx/xx" は無効です。 エラーメッセージは移行失敗ログに含まれています。
java.lang.IllegalArgumentException: バケット名 "xxx/xx" が無効です。 バケット名は、1) 小文字、数字、またはダッシュ (-) で構成されている必要があります。2) 小文字または数字で始まります。3) は3〜63文字の長さです。
原因: destBucketパラメーターの値が無効です。
解決策: 有効なバケット名を入力します。 バケット命名の詳細については、「バケット命名規則」をご参照ください。
「Connect t o xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out. 」エラーメッセージは、移行失敗ログに含まれています。
HTTPリクエストを実行できません: o xxx.oss-cn-beijing-internal.aliyuncs.com:80タイムアウトした接続
[ErrorCode]: ConnectionTimeout
[RequestId]: 不明
原因: 設定ファイルはOSSの内部エンドポイントを使用していますが、データの移行に使用されるデバイスはElastic Compute Service (ECS) インスタンスではないか、OSSバケットと同じリージョンにあるECSインスタンスではないため、接続タイムアウトエラーが返されます。 バケットの内部エンドポイントは、OSSバケットと同じリージョンにあるECSインスタンスからのアクセスのみを許可します。
解決策:
構成ファイルでドメイン名をパブリックエンドポイントに設定します。 移行ジョブを削除し、ジョブを再送信します。
バケットと同じリージョンにあるECSインスタンスを使用して、移行ジョブを実行します。
「指定されたバケットは無効です。」エラーメッセージが移行失敗ログに含まれています。
com.aliyun.oss.OSSException: 指定されたバケットは無効です。
[ErrorCode]: InvalidBucketName
[RequestId]: 57906B4DD0EBAB0FF553D661
[HostId]: you-bucket.you-bucketoss-cn-hangzhou-internal.aliyuncs.com
原因: destDomianパラメーターの値が無効です。
解決策: destDomainパラメーターの値は、バケット名を含むサブドメインではなく、バケットが配置されているリージョンのエンドポイントである必要があります。 たとえば、バケットが中国 (北京) リージョンにある場合、r oss-cn-beijing.aliyuncs.comします。 詳細については、「設定ファイルの例」をご参照ください。
「Unable to execute HTTP request: The Difference between ... is too large. 」エラーメッセージは、移行失敗ログに含まれています。
HTTPリクエストを実行できません: リクエスト時刻と現在の時刻の差が大きすぎます。
[ErrorCode]: RequestTimeTooSkewed
[RequestId]: xxxxxxx
原因:
ほとんどの場合、オンプレミスマシンまたはデバイスのシステム時間とOSSサーバーの時間の差は15分を超えています。
多すぎる数のリクエストが同時に送信されます。 これにより、CPU使用率が高くなり、同時アップロードが遅くなります。
解決策:
ローカルシステム時刻とOSSサーバーの時刻を同期します。
同時に送信されるリクエストの数が多すぎる場合は、sys.propertiesファイルのworkerTaskThreadNumパラメーターを小さい値に設定します。
移行失敗ログには、「No route to host. 」というエラーメッセージが含まれています。
原因: このエラーは、ローカルファイアウォールまたはiptablesのためにネットワーク接続が失敗した場合に返されることがあります。
解決策: pingコマンドを実行して、移行元と移行先の間のネットワーク接続を確認します。
ネットワーク接続が正常な場合は、コンピューターのファイアウォールとローカルファイアウォールに制限が設定されているかどうかを確認できます。 ファイアウォールを無効にしてから、ネットワーク接続をテストすることもできます。
ネットワーク接続に異常がある場合は、問題をトラブルシューティングして再試行してください。
http URLリストを使用してデータを移行すると、移行失敗ログに "Unknown HTTP list file format." エラーメッセージが表示されます。
原因: 指定されたHTTPリストファイルの形式または内容が無効な場合、このエラーが返されます。
解決策:
ファイルが別のオペレーティングシステムからコピーされている場合は、ファイルを移行用の有効な形式に変換します。 たとえば、Linuxでmac2unixとdoc2unixを実行し、Windowsでメモ帳などのツールを使用してファイル形式を変換できます。
HTTPリストファイルの形式が不正な場合は, 有効な形式に変更してください。 HTTPリストファイルの形式の詳細については、「設定ファイル」をご参照ください。
オブジェクトキー "/xxxxx.jpg" is invalidエラーメッセージが移行失敗ログに含まれています。
例外: java.lang.IllegalArgumentException: オブジェクトキー "/xxxxx.jpg" が無効です。 オブジェクト名は、UTF-8としてエンコードする場合は1〜1023バイトで、XML1.0でサポートされていない文字のLFまたはCRを含めることはできません。また、「 /」または「 \」で始めることはできません。
原因: srcPrefixまたはdestPrefixパラメーターの値が無効です。
解決策:
srcPrefixパラメーターにディレクトリが指定されているかどうかを確認します。 はいの場合、パラメーターの値はスラッシュ (/) で終わる必要があります。
destPrefixパラメーターの値がスラッシュ (/) またはバックスラッシュ (\) で始まるかどうかを確認します。 そうである場合、スラッシュ (/) またはバックスラッシュ (\) を削除します。
一般的なジョブ実行の問題
データ移行中にエラーが発生した場合は, ジョブ実行ログを参照できます。
スタンドアロン展開: ジョブ実行ログファイルのパスはlogs/ossimport2.logです。
分散配置: ジョブ実行ログファイルのパスはlogs/import.logです。
UnsupportedClassVersionError。 はコマンドを実行すると返されます。
スレッド "main" java.lang.UnsupportedClassVersionErrorの例外: com/aliyun/ossimport2/OSSImport2: サポートされていないmajor.minorバージョン51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at com.simontuffs.onejar.JarClassLoader.defineClass(JarClassLoader.java:693)
at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:599)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.simontuffs.onejar.Boot.run(Boot.java:300)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
原因: Javaバージョンが必要なバージョンより前です。
解決策: Javaバージョンを1.7または1.8にアップグレードします。
InvocationTargetException。 は、submitコマンドを実行してジョブを送信すると返されます。
スレッド "main" java.lang.reflect.InvocationTargetExceptionの例外
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
原因: java.lang.NullPointerException
at com.aliyun.ossimport2.config.JobConfig.load(JobConfig.java:44)
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6もっと
原因: 設定ファイルが不完全です。 たとえば、構成ファイルから一部の構成項目が削除またはコメントアウトされます。
解決策: 設定ファイルから削除またはコメントアウトされた設定項目を復元します。 設定項目が必要ない場合は、等号 (=) の右側の値を空のままにするか、設定項目を削除します。 設定例の詳細については、「設定ファイルの例」をご参照ください。
ジョブ実行ログには、com.aliyun.oss.ClientException: Unknown. というエラーメッセージが表示されます。
com.aliyun.oss.ClientException: 不明
[ErrorCode]: NonRepeatableRequest
[RequestId]: 非反復リクエストエンティティでリクエストを再試行できません。 原因は、元の要求が失敗した理由をリストします。
原因: com.aliyun.oss.ClientException: Unknown. または、サーバーが全帯域幅を消費すると、SocketTimeoutExceptionエラーが返されます。
解決策: ossimportは自動的に移行ジョブを再試行します。 それでもジョブが失敗した場合は、retryコマンドを実行してファイルを再度移行します。
Linuxのジョブ実行ログに、「開いているファイルが多すぎます。」というエラーメッセージが表示されます。
解決策: ulimit -nコマンドを実行して、Linuxのハンドルの制限を表示します。
ハンドル制限が10,000より小さい場合は、ulimit -n 65536コマンドを実行して値を増やし、プロセスを再起動します。
ハンドル制限が10,000より大きい場合は、sudo lsof -nコマンドを実行して、ハンドルが有効になっているプロセスを確認します。 プロセスを評価し、不要なプロセスを停止してハンドルを解放できます。 ハンドルが不要になった場合は、ハンドルを解放することをお勧めします。
Windowsでジョブが開始された後、移行ジョブが予期せず終了します。
原因:
Javaがインストールされていないか、1.7より前のJavaバージョンが使用されています。
設定ファイルが無効です。
解決策:
Java 1.8をインストールします。
サンプル設定に基づいて設定ファイルを変更します。 設定例の詳細については、「設定ファイルの例」をご参照ください。
submitコマンドを実行してジョブを送信した後、ジョブは実行されていません。 は、statコマンドを実行してジョブのステータスを表示すると表示されます。
sudo bash console.sh stat
[WARN] リストファイルが存在しない: /home/<user>/ossimport/workdir/master/jobs /
ジョブが実行または終了していません。
原因: statコマンドを実行しても、ジョブまたはサービスは開始されません。 statコマンドは、ジョブが送信されてサービスが開始された後にのみ、ジョブのステータスを返します。
解決策:
startコマンドを実行してサービスを開始します。
サービスが開始され、ジョブが送信されたばかりの場合、マスターは最初にファイルリストをスキャンする必要があります。 タスクが作成およびディスパッチされていない場合、このエラーが返されます。
サービス開始およびジョブの投入から長時間経過してもエラーが発生した場合は, 起動後にプロセスが予期せず終了していないか確認してください。 ossimportがスタンドアロンモードでデプロイされている場合、ログファイルのパスはlogs/ossimport2.logです。 ossimportが分散モードでデプロイされている場合、ジョブファイルのパスはlogs/ossimport.logです。 エラーの原因を特定し, エラーを修正してサービスプロセスを开始してください。
scanFinished: false。 は、statコマンドを実行してジョブのステータスを確認すると表示されます。
解決策: ジョブの総数が増加するかどうかを確認します。
タスクの総数が増加すると、移行ジョブのファイルリストに新しいファイルが表示されます。 この場合、このエラーが返されるのは正常です。
増分データ移行モードが有効で、scanFinishedがtrueではなく、タスク数が変更されない場合、ossimportは指定された間隔でソースディレクトリをスキャンして、新しいファイルまたは変更されたファイルを確認します。
増分データ移行モードを無効にしてタスク数が増加しない場合は, ジョブ実行ログに例外がないか確認してください。 ossimportがスタンドアロンモードでデプロイされている場合、ログファイルのパスはlogs/ossimport2.logです。 ossimportが分散モードでデプロイされている場合、ジョブファイルのパスはlogs/ossimport.logです。 エラーの原因を特定し, エラーを修正してサービスプロセスを开始してください。
Linuxのプロセスは異常ですが、ログファイルに例外は報告されません。
原因: システムの使用可能なメモリが2 GB未満の場合、メモリ不足によりプロセス例外が発生する可能性があります。
解決策: メモリ不足のため、dmesgログにプロセス例外に関するレコードが含まれているかどうかを確認します。
プロセス例外が発生した後にサービスを再起動するときに実行する必要がある操作は何ですか?
解決策: cleanコマンドを実行して同じ名前のジョブを削除しないと、送信されたすべてのジョブにブレークポイントレコードが含まれます。 この場合、startコマンドを実行して、ジョブを再度送信せずにサービスを直接開始できます。
Linux上のOSSに名前文字化けしたファイルをアップロードするにはどうすればよいですか?
解決策:
文字化けした名前のエンコード形式を確認します。
export LANG="<your file name encode>" コマンドを実行して、文字化けしたファイル名のエンコード形式を解析します。
cleanコマンドを実行して元のジョブをクリアし、submitコマンドを実行してジョブを再度送信します。
java.nio.file.AccessDeniedException. はサービスの開始時に返されます。
原因: 設定ファイルにアクセスする権限がありません。
解決策:
すべてのユーザーの読み取り権限を追加します。
管理者としてLinuxにログインし、サービスを開始します。
Task Countsの値は0ですが、JobStateはSUCCEEDです。
[2015-12-28 16:12:35] [情報] JobName:dir_data
[2015-12-28 16:12:35] [INFO] 保留中のタスク数: 0
[2015-12-28 16:12:35] [INFO] ディスパッチされたタスク数: 0
[2015-12-28 16:12:35] [INFO] 成功タスク数: 0
[2015-12-28 16:12:35] [INFO] 失敗したタスク数: 0
[2015-12-28 16:12:35] [INFO] スキャン終了: true
[2015-12-28 16:12:35] [情報] JobState:SUCCEED
原因
srcPrefixの値が無効なため、ファイルを一覧表示できません。
srcPrefixで指定されたディレクトリにはオブジェクトが含まれません。 ディレクトリの概念はOSSによってシミュレートされるため、ディレクトリをOSSにアップロードできません。
解決策: srcPrefixパラメーターに有効な値を指定し、srcPrefixで指定されたディレクトリに使用可能なファイルがあることを確認します。
InvocationTargetException。 はジョブを送信すると返されます。
sudo送信ジョブ:/disk2/ossimport2/local_job.cfg
スレッド "main" java.lang.reflect.InvocationTargetExceptionの例外
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
原因: java.lang.NullPointerException
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6もっと
原因: 構成ファイルまたは構成ファイルのパスが無効なため、このエラーが返されます。
解決策:
conf/sys.propertiesファイルでworkingDir項目の有効な値を指定します。
設定ファイルのパスを確認します。
同期用のソースファイルが存在しません。
原因: マスターが移行ジョブを実行すると、マスターは最初にファイルをリストし、次にリスト内のファイルを移行します。 リスト後にファイルがソースから削除された場合、ファイルは移行できません。 この場合、マスターは削除されたソースファイルをスキップし、削除されたファイルをエラーリストに報告します。
ジョブ设定ファイルは有効ですが, ジョブの実行状况とジョブ设定ファイルの设定とが移行中に一致しません。
原因: ジョブの送信後にジョブの構成ファイルに加えられた変更は、ジョブに対して有効になりません。 たとえば、送信されたジョブを一時停止して構成ファイルを変更した後、変更はジョブに適用されません。
解決策: cleanコマンドを実行して、以前のジョブを削除します。 ジョブ設定ファイルを変更した後、ジョブを再度送信します。
ファイルは正常に転送されますが、エラーはNullPointerExceptionです。 が返されます。
原因: ファイル統計機能がossimport 2.3.5に追加されました。 この機能では、cptファイルをロードする必要があります。 ただし、HTTPジョブのcpt読み込み形式は他のソースとは異なります。 その結果、プログラムの不一致が発生する。
解決策:
ossimportをバージョン2.3.4にロールバックします。
エラーを無視します。 このエラーは、移行ジョブには影響しません。
UPYUN Storage Service (USS) からのデータ移行に関する一般的な問題
ジョブの数は常に0です。
解決策: ジョブ実行ログを表示します。
[2016-07-21 10:21:46] [INFO] [name=YoupaiList、totalRequest=1729925、avgLatency=38、
recentLatency=300000]
ジョブ実行ログの
recentLatency
の値が30,000以下の場合, ファイルが一覧表示されます。 ほとんどの場合、ファイルがUSSにリストされるまでに30秒 (タイムアウト) 以上かかることがあります。 返されるファイルの数は、30秒で表示されるファイルの数によって異なります。 リストが完了するまで待ちます。recentLatency
の値が小さい場合、アカウントのパスワードが無効なため、このエラーが発生します。 USS SDKからエラーが報告された場合、nullのみが返され、エラー結果は返されません。 この場合、パケットをキャプチャして、トラブルシューティングのためにUSSから返されたエラーコードを取得します。
USSからデータを移行するときに、srcAccessKey
とsrcSecretKey
を指定する方法を教えてください。
解決策: USSのオペレータアカウントとパスワードを入力します。
USSからデータを移行すると、HTTP 429のステータスコードが表示され続けます。
原因: 期間内のリクエスト数が、USS SDKに設定されているリクエストスロットリングしきい値を超えています。
解決策: USSに連絡して、リクエストの調整を削除します。
移行ジョブが完了すると、OSSコンソールに表示されるデータボリュームはソースデータボリュームよりも小さくなります。
説明: すべての移行ジョブが完了した後、OSSコンソールでバケットサイズは変更されませんが、Linuxのduコマンドによって返されるデータサイズは大きく異なります。
原因:
OSSコンソールのバケットサイズは、1〜2時間の遅延で更新されます。 1〜2時間後にバケットサイズが変更されるかどうかを確認します。
Linuxのduコマンドは、ファイルサイズより大きいブロックサイズを計算します。 ls -lR <絶対ディレクトリパス> | grep "\-rw" | awk '{sum +=$5}END{print sum}' コマンドを実行して、ローカルディレクトリの実際のサイズを計算することを推奨します。
Linuxで実行されるコマンドに対して、unknownコマンド "java" またはunknownコマンド "nohup" などのメッセージが返されます。
原因: コマンドの使用に必要なパッケージがインストールされていません。
解決策: yum、apt-get、またはzypperコマンドを実行して、対応するパッケージをインストールします。
設定ファイルでsrcPrefix
を使用してファイルを指定できますか?
いいえ、srcPrefixを使用してファイル形式を指定することはできません。 ディレクトリまたはプレフィックスの指定には、srcPrefix
のみを使用できます。
ossimportのプロキシを設定できますか?
いいえ、ossimportのプロキシを設定できません。
OSS内のデータ移行に対して課金されるのはなぜですか。
内部エンドポイントを使用してデータを移行する場合、リクエストの数に基づいて課金されます。 トラフィック料金は請求されません。
増分データ移行モードが有効になっている場合、ローカルディレクトリから削除されたファイルはOSSから削除されますか。
いいえ、ローカル削除操作はOSSに同期されません。
増分データ移行モードが有効になっている場合、新しいローカルファイルがOSSに同期されないのはなぜですか。
増分データ移行モードでは、ファイルの最後の変更時刻を使用して、ファイルが新しいかどうかを判断します。 Linuxのmvコマンドと、-t
または -a
パラメーターを指定したcp、mv、rsyncなどのWindowsコマンドは、ファイルの最終変更時刻を変更しません。 これらのコマンドの実行によって変更されたファイルは、移行中にスキャンされず、OSSに同期されません。
ossimportは元のファイル権限をOSSに同期しますか?
いいえ、ossimportは元のファイル権限をOSSに同期しません。 移行が完了したら、ossutilのset-metaコマンドを実行して権限を変更できます。 詳細については、「set-meta (オブジェクトメタデータの管理) 」をご参照ください。