удалить файлы s3 из конвейера AWS

Я хотел бы спросить о задаче обработки, которую я пытаюсь выполнить с помощью конвейера данных в AWS, но мне не удалось заставить ее работать.

По сути, у меня есть 2 узла данных, представляющих 2 базы данных MySQL, из которых предполагается периодически извлекать данные и помещать их в корзину S3. Это действие копирования работает нормально, выбирая ежедневно каждую добавленную строку, скажем, сегодня - 1 день.

Однако эта корзина, содержащая собранные данные в виде CSV, должна стать входом для операции EMR, которая будет обрабатывать эти файлы и агрегировать информацию. Проблема в том, что я не знаю, как удалить или переместить уже обработанные файлы в другое ведро, поэтому мне не нужно обрабатывать все файлы каждый день.

Чтобы уточнить, я ищу способ переместить или удалить уже обработанные файлы в ведре S3 из конвейера. Могу ли я сделать это? Есть ли другой способ, которым я могу обрабатывать только некоторые файлы в действии EMR на основе соглашения об именах или чего-то еще?


person Juan Gonzalez    schedule 22.10.2014    source источник


Ответы (3)


Еще лучше создать DataPipeline ShellCommandActivity и использовать инструменты командной строки aws.

Создайте сценарий с этими двумя строками:

    sudo yum -y upgrade aws-cli 
    aws s3 rm $1 --recursive

Первая строка гарантирует, что у вас есть новейшие инструменты AWS.

Второй удаляет каталог и все его содержимое. $ 1 - это аргумент, переданный скрипту.

В вашем ShellCommandActivity:

    "scriptUri": "s3://myBucket/scripts/theScriptAbove.sh",
    "scriptArgument": "s3://myBucket/myDirectoryToBeDeleted"

Подробная информация о том, как работает команда aws s3, находится по адресу:

    http://docs.aws.amazon.com/cli/latest/reference/s3/index.html
person Bob Swerdlow    schedule 23.12.2014
comment
Спасибо! это именно то, что я искал. - person Juan Gonzalez; 22.01.2015

1) Создайте сценарий, который принимает входной путь, а затем удаляет файлы с помощью hadoop fs -rmr s3path. 2) Закачиваем скрипт в s3

В emr используйте предварительный шаг - 1) hadoop fs -copyToLocal s3: // имя сценария. 2) chmod + x имя сценария 3) запустить сценарий

Вот и все.

person Balaji    schedule 25.10.2014

Другой подход без использования EMR - установка инструмента s3cmd через ShellCommandActivity в небольшом экземпляре EC2, после чего вы можете использовать s3cmd в конвейере управлять репозиторием S3 любым удобным для вас способом.

Сложной частью этого подхода является безопасная настройка s3cmd через файл конфигурации (в основном, передача ключа доступа и секрета), поскольку вы не можете просто использовать ssh в экземпляре EC2 и интерактивно использовать s3cmd --configure в конвейере.

Для этого вы создаете файл конфигурации в ShellCommandActivity, используя cat. Например:

cat <<EOT >> s3.cfg
blah
blah
blah
EOT

Затем используйте опцию '-c', чтобы прикреплять файл конфигурации каждый раз, когда вы вызываете s3cmd следующим образом:

s3cmd -c s3.cfg ls

Звучит сложно, но работает.

person piggybox    schedule 29.10.2014