我想知道是否可以捕获存储在amazon s3上的gzip文件。也许使用一些流媒体客户端。你觉得怎么样?
我们正在寻找类似于zcat s3://bucket_name/your_file | grep "log_id"
答案 0 :(得分:7)
来自S3 REST API » Operations on Objects » 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 by Tim Kay recommended by Hari。请注意,只要您使用以aws
开头的命令版本,就不必将Tim Kay的脚本放在您的路径上或以其他方式安装它(除了使其可执行)。
$ ./aws cat BUCKET/OBJECT | zcat | grep "log_id"
答案 1 :(得分:6)
您还可以使用s3cat,它是Tim Kay的AWS命令行工具包的一部分:
要获得zcat FILENAME | grep "log_id"
的等价物,您需要:
> s3cat BUCKET/OBJECT | zcat - | grep "log_id"
答案 2 :(得分:4)
不是exaclty一个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>
答案 3 :(得分:4)
今天找到了这个帖子,并且喜欢Keith的回答。快进到今天,它完成了:
aws s3 cp s3://some-bucket/some-file.bz2 - | bzcat -c | mysql -uroot some_db
可能会在很短的时间内拯救别人。
答案 4 :(得分:2)
如果您的操作系统支持(可能),您可以使用/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官方工具。取胜。
答案 5 :(得分:0)
您需要尝试使用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