Zcat на Amazon S3 - PullRequest
       5

Zcat на Amazon S3

11 голосов
/ 11 октября 2011

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

Мы ищем операцию, подобную zcat s3://bucket_name/your_file | grep "log_id"

Ответы [ 6 ]

7 голосов
/ 13 февраля 2013

Из S3 REST API »Операции с объектами» Объект GET :

Чтобы использовать 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 Тима Кея как , рекомендованный Хари .Обратите внимание, что вам не нужно помещать сценарий Тима Кея в ваш путь или иным образом устанавливать его (за исключением того, чтобы сделать его исполняемым), если вы используете версии команд, которые начинаются с aws, например.

$ ./aws cat BUCKET/OBJECT | zcat | grep "log_id"
6 голосов
/ 13 февраля 2013

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

http://timkay.com/aws/

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

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

4 голосов
/ 01 ноября 2017

Нашел эту ветку сегодня, и ему понравился ответ Кита.Перенесемся в современную среду, с которой это делается:

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

Может сэкономить кому-то еще немного времени.

4 голосов
/ 12 октября 2011

Не совсем 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>
2 голосов
/ 18 июня 2014

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

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

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

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

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

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

0 голосов
/ 24 марта 2017

Вам нужно попробовать использовать 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
...