Hive を使用して S3 バケット内のいくつかのファイルを処理する必要があります。問題は、どうやら Hive がバケットをフォルダーとして使用することを好まないため、別のバケットにフォルダーを作成し、s3cmd 経由でそこにファイルをコピーすることにしました。
これが私の命令です:
s3cmd -v cp s3://main.bucket/\* s3://temp.bucket/input/
すると、s3cmd はすぐに転送するファイルが X 個あることを宣言し (通常は 5k++ 程度)、1 つのファイルをコピーした後、次のエラーを出して終了します。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
An unexpected error has occurred.
Please report the following lines to:
[email protected]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Problem: KeyError: 'dest_name'
S3cmd: 1.0.1
Traceback (most recent call last):
File "/usr/local/bin/s3cmd", line 2006, in <module>
main()
File "/usr/local/bin/s3cmd", line 1950, in main
cmd_func(args)
File "/usr/local/bin/s3cmd", line 614, in cmd_cp
subcmd_cp_mv(args, s3.object_copy, "copy", "File %(src)s copied to %(dst)s")
File "/usr/local/bin/s3cmd", line 604, in subcmd_cp_mv
dst_uri = S3Uri(item['dest_name'])
KeyError: 'dest_name'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
An unexpected error has occurred.
Please report the above lines to:
[email protected]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
まあ、それは最悪だ。
問題はバケット間の転送にあると考え、main.bucket 内にフォルダーを作成し、そこにすべてをコピーすることにしました。コピー先のフォルダーもコピーされてループなどが発生するかどうかは気にしませんでした。その時点で私は途方に暮れていました。
新しいコマンドは次のとおりです。
s3cmd -v cp s3://main.bucket/\* s3://main.bucket/111a/
再度、1 つのファイルのみがコピーされ、同じエラーが発生しました。
これはどういう意味でしょうか? どうすれば修正できますか?
ありがとう。
PS 他の方法がすべて失敗した場合は、AWS の GUI で実行できると思いますが、すべてのチェックボックスを手動でチェックするのは面倒です。私の知る限り、下にスクロールしすぎると、上でチェックしたファイルが忘れられてしまい、非常に遅いペースで実行せざるを得なくなります。
一度にすべて選択し、新しいディレクトリにコピーして貼り付ける方法があれば便利です。
答え1
非常に古いバージョンの s3cmd を使用しています。このバグはその後修正されたと思います。アップストリームの github.com/s3tools/s3cmd マスター ブランチでもう一度お試しください。現在、1.5.0-rc1 が最新のリリースです。