2011-10-11 43 views
10

Tôi tự hỏi liệu có thể cho mèo một tệp gzip được lưu trữ trên amazon s3 hay không. Có thể sử dụng một số khách hàng đang phát triển. Bạn nghĩ sao?zcat trên amazon s3

Chúng tôi đang loking cho một hoạt động tương tự như zcat s3://bucket_name/your_file | grep "log_id"

Trả lời

4

Không exaclty một zcat, nhưng một cách để sử dụng Hadoop để download các file lớn song song từ S3 có thể là http://hadoop.apache.org/common/docs/current/distcp.html

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

hoặc

hadoop distcp s3: // YOUR_BUCKET/HDFS your_file: // chủ: 8020/your_file

Có lẽ từ thời điểm này bạn có thể đường ống một zcat ...

Để thêm thông tin của bạn, bạn phải chỉnh sửa tập tin lõi-site.xml với:

<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> 
6

Bạn cũng có thể sử dụng s3cat, một phần của Tim bộ công cụ dòng lệnh Kay cho AWS:

http://timkay.com/aws/

để có được tương đương với zcat FILENAME | grep "log_id", bạn muốn làm:

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

6

Từ S3 REST API » Operations on Objects » GET Object:

Để sử dụng GET, bạn phải ĐỌC truy cập vào các đối tượng. Nếu bạn cấp quyền truy cập READ cho người dùng ẩn danh, bạn có thể trả về đối tượng mà không sử dụng tiêu đề ủy quyền.

Nếu đó là trường hợp, bạn có thể sử dụng:

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

hoặc

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

Tuy nhiên, nếu bạn chưa cấp quyền truy cập ĐỌC nặc danh trên đối tượng, bạn cần phải tạo và gửi tiêu đề ủy quyền như một phần của yêu cầu GET và điều này có vẻ hơi tẻ nhạt khi thực hiện với curl/wget. May mắn cho bạn, ai đó đã thực hiện nó và đó là Perl aws script by Tim Kayrecommended by Hari. Lưu ý rằng bạn không phải đặt kịch bản của Tim Kay trên đường dẫn của bạn hoặc cài đặt nó (ngoại trừ việc thực thi nó), miễn là bạn sử dụng các phiên bản lệnh bắt đầu bằng aws, ví dụ:

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

Nếu hệ điều hành của bạn hỗ trợ nó (khả năng), bạn có thể sử dụng /dev/fd/1 cho mục tiêu cho aws s3 cp:

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

Dường như có một số byte trailing sau EOF, nhưng zcatbzcat thuận tiện chỉ cần viết một cảnh báo đến STDERR.

Tôi chỉ xác nhận rằng đây hoạt động bằng cách tải một số DB bãi trực tiếp từ S3 như thế này:

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

Tất cả điều này không có gì nhưng những thứ đã có trên máy tính của bạn và các công cụ chính thức AWS CLI. Thắng lợi.

0

Bạn cần thử sử dụng s3streamcat, nó hỗ trợ tệp nén bzip, gzip và xz.

Install với

sudo pip install s3streamcat Cách sử dụng

Cách sử dụng:

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

Tìm thấy chủ đề này ngày hôm nay, và thích câu trả lời của Keith. Nhanh chóng chuyển tiếp đến AWS ngày nay cli nó được thực hiện với:

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

Có thể tiết kiệm người khác một chút thời gian.