Zcat на amazon s3

Мне интересно, можно ли катавать файл gzip, хранящийся на amazon s3. Возможно, с помощью какого-то потокового клиента. Как вы думаете?

Мы выполняем операцию, аналогичную zcat s3://bucket_name/your_file | grep "log_id"

Ответ 1

Вы также можете использовать s3cat, часть инструментария командной строки Tim Kay для AWS:

http://timkay.com/aws/

Чтобы получить эквивалент zcat FILENAME | grep "log_id", вы должны:

> s3cat BUCKET/OBJECT | zcat - | grep "log_id"

Ответ 2

От S3 REST API "Операции над объектами" GET Object:

Чтобы использовать GET, вы должны иметь READ-доступ к объекту. Если вы предоставляете доступ READ к анонимному пользователю, вы можете вернуть объект без использования заголовка авторизации.

В этом случае вы можете использовать:

$ curl <url-of-your-object> | zcat | grep "log_id"

или

$ wget -O- <url-of-your-object> | zcat | grep "log_id"

Однако, если вы не предоставили анонимный доступ READ к объекту, вам необходимо создать и отправить заголовок авторизации как часть запроса GET, и это становится несколько утомительным с curl/wget, К счастью для вас, кто-то уже это сделал и что Perl aws script от Tim Kay как рекомендуется Hari. Обратите внимание, что вам не нужно ставить Tim Kay script на свой путь или иным образом устанавливать его (за исключением того, чтобы сделать его исполняемым), если вы используете версии команд, начинающиеся с aws, например.

$ ./aws cat BUCKET/OBJECT | zcat | grep "log_id"

Ответ 3

Не exaccty zcat, но способ использовать hadoop для загрузки больших файлов, параллельных S3, может быть http://hadoop.apache.org/common/docs/current/distcp.html

hadoop distcp s3://YOUR_BUCKET/your_file/tmp/your_file

или

hadoop distcp s3://YOUR_BUCKET/your_file hdfs://master: 8020/your_file

Возможно, с этого момента вы можете пропустить zcat...

Чтобы добавить свои учетные данные, вы должны отредактировать файл core-site.xml с помощью

<configuration>
<property>
  <name>fs.s3.awsAccessKeyId</name>
  <value>YOUR_KEY</value>
 </property>
 <property>
  <name>fs.s3.awsSecretAccessKey</name>
  <value>YOUR_KEY</value>
</property>
<property>
  <name>fs.s3n.awsAccessKeyId</name>
  <value>YOUR_KEY</value>
 </property>
 <property>
  <name>fs.s3n.awsSecretAccessKey</name>
  <value>YOUR_KEY</value>
</property>
</configuration>

Ответ 4

Если ваша ОС поддерживает его (вероятно), вы можете использовать /dev/fd/1 для цели для aws s3 cp:

aws s3 cp s3://bucket_name/your_file | zcat | grep log_id

Кажется, что после EOF есть некоторые байты с завершающим байтом, но zcat и bzcat удобно просто написать предупреждение для STDERR.

Я только что подтвердил, что это работает, загружая некоторые отвалы DB прямо из S3 следующим образом:

aws s3 cp s3://some_bucket/some_file.sql.bz2 /dev/fd/1 | bzcat -c | mysql -uroot some_db

Все это без ничего, кроме материала, уже имеющегося на вашем компьютере, и официальных инструментов AWS CLI. Win.

Ответ 5

Нашел эту тему сегодня, и ей понравился Кит. Ускоренный переход на сегодняшний день aws cli, сделанный с помощью:

aws s3 cp s3://some-bucket/some-file.bz2 - | bzcat -c | mysql -uroot some_db

Возможно, кому-то еще немного осталось немного времени.

Ответ 6

Вам нужно попробовать s3streamcat, он поддерживает сжатые файлы bzip, gzip и xz.

Установить с помощью

sudo pip install s3streamcat Использование

Применение:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something