2013-01-24 40 views
13

Tôi có tệp 17,7 GB trên S3. Nó được tạo ra như là đầu ra của một truy vấn Hive và nó không được nén.Nén tệp trên S3

Tôi biết rằng bằng cách nén, nó sẽ có khoảng 2,2 GB (gzip). Làm thế nào tôi có thể tải tập tin này tại địa phương càng nhanh càng tốt khi chuyển là nút cổ chai (250kB/s).

Tôi không tìm thấy cách đơn giản nào để nén tệp trên S3 hoặc cho phép nén khi chuyển trong s3cmd, boto hoặc các công cụ liên quan.

+1

Bạn có khả năng tạo lại tệp này bằng cách chạy lại truy vấn Hive của bạn không? Nếu có tôi sẽ tư vấn cho phép nén đầu ra cho truy vấn Hive của bạn. –

+0

@CharlesMenguy: Tôi thực sự đã làm điều này lần đầu tiên (tôi nghĩ). Tuy nhiên có một 'lệnh by' trong câu lệnh, và điều này ảnh hưởng đến đầu ra. Thông thường tôi sẽ nhận được một tập tin cho mỗi công việc bản đồ, nhưng thay vào đó tôi có một tập tin duy nhất từ ​​giảm mà tôi giả định là nơi đặt hàng đã được thực hiện. –

+0

Làm cách nào để bạn cho phép nén đầu ra trong truy vấn của mình? Tôi nghĩ rằng bạn sẽ có thể nén đầu ra của khá nhiều bất kỳ truy vấn Hive bất kể cho dù có một 'order by' hay không. Tôi giả sử bạn đang viết thư cho S3 bằng cách thực hiện một 'chèn ghi đè thư mục 's3n: // ...'', phải không? –

Trả lời

1

Cuối câu trả lời nhưng tôi thấy điều này làm việc một cách hoàn hảo.

aws s3 sync s3://your-pics . 

for i in `find | grep -E "\.jpg$|\.jpg$"`; do gzip "$i" ; echo $i; done 

aws s3 sync . s3://your-pics --content-encoding gzip --dryrun 

Thao tác này sẽ tải xuống tất cả các tệp trong xô s3 sang máy (hoặc ví dụ ec2), nén tệp hình ảnh và tải chúng lên s3. Xác minh dữ liệu trước khi xóa cờ dryrun.

Các vấn đề liên quan