Мне нужно обработать некоторые файлы в бакете S3 с помощью hive. Проблема в том, что hive, по-видимому, не любит использовать бакеты как папки, поэтому я решил создать папку в другом бакете и скопировать туда файлы с помощью s3cmd.
Вот мой приказ:
s3cmd -v cp s3://main.bucket/\* s3://temp.bucket/input/
Затем s3cmd тут же сообщает, что у меня есть X файлов для передачи (обычно порядка 5k++), а затем после копирования одного файла вылетает со следующей ошибкой:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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/
Опять же, он скопировал только один файл и выдал ту же ошибку.
Что это может значить? Как это исправить?
Спасибо.
P.S. Если все остальное не сработает, я полагаю, что я мог бы сделать это через графический интерфейс AWS, но вручную проверять каждый флажок — это больно. Насколько мне известно, если вы прокрутите вниз достаточно долго, он тупо забудет файлы, которые вы проверили выше, заставив вас делать это со скоростью улитки.
Если бы существовал способ выбрать их все сразу и скопировать и вставить в новый каталог, это было бы здорово.
решение1
Вы используете очень старую версию s3cmd. Я думаю, что эта ошибка была исправлена за прошедшие годы. Пожалуйста, попробуйте еще раз с основной веткой github.com/s3tools/s3cmd. На сегодняшний день самой последней версией является 1.5.0-rc1.