Sao chép thùng s3 nhanh hơn


93

Tôi đã cố gắng tìm một công cụ dòng lệnh tốt hơn để sao chép nhóm so với s3cmd . s3cmdcó thể sao chép các nhóm mà không cần phải tải xuống và tải lên từng tệp. Lệnh tôi thường chạy để sao chép các nhóm bằng s3cmd là:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

Điều này hoạt động, nhưng nó rất chậm vì nó sao chép từng tệp qua API một. Nếu s3cmdcó thể chạy ở chế độ song song, tôi sẽ rất vui.

Có các tùy chọn khác có sẵn dưới dạng công cụ dòng lệnh hoặc mã mà mọi người sử dụng để sao chép nhóm nhanh hơn s3cmdkhông?

Chỉnh sửa: Có vẻ như s3cmd-modification chính xác là những gì tôi đang tìm kiếm. Quá tệ là nó không hoạt động. Có sự lựa chọn nào khác không?


6
Không chắc tại sao câu hỏi này liên tục bị đóng lại, vì có vẻ như một số nhà phát triển đã vướng vào nó. Dù sao, tôi đã giải quyết nó theo cách rất song song, đây là liên kết: github.com/cobbzilla/s3s3mirror, cảm ơn! - jonathan.
cobbzilla

Câu trả lời:


166

AWS CLI dường như thực hiện công việc một cách hoàn hảo và có phần thưởng là một công cụ được hỗ trợ chính thức.

aws s3 sync s3://mybucket s3://backup-mybucket

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

Hỗ trợ chuyển đồng thời theo mặc định. Xem http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

Để nhanh chóng chuyển một số lượng lớn các tệp nhỏ, hãy chạy tập lệnh từ một phiên bản EC2 để giảm độ trễ và tăng max_concurrent_requestsđể giảm tác động của độ trễ. Ví dụ:

aws configure set default.s3.max_concurrent_requests 200

4
Nó hỗ trợ đồng bộ hóa không đồng thời dựa trên thời gian sửa đổi tệp, kích thước, v.v. Nó rất nhanh khi tôi thử nó. Tôi tin rằng các đối tượng được sao chép trực tiếp trên S3 mà không cần tải chúng xuống máy cục bộ. Nó không chạy song song theo mặc định nhưng tôi chắc chắn rằng bạn có thể có nhiều lệnh đồng bộ hóa chạy trên các thư mục con riêng biệt cùng một lúc. Nó đủ nhanh để có thể bạn sẽ không cần nó chạy song song. Tôi vừa sao chép 100GB dữ liệu trong vài phút.
python1981

10
Chậm như điên nếu số lượng tệp nhiều.
Phương Nguyễn

14
Khi chuyển nhiều tệp nhỏ, độ trễ trở thành hạn chế quan trọng, vì vậy việc chạy lệnh này từ phiên bản EC2 là điều cần thiết.
python1981

1
Tôi đã sử dụng cái này để xây dựng một docker và hoạt động khá tốt github.com/sunshineo/s3-bucket-copier
Gordon Sun

3
Bây giờ nó KHÔNG hỗ trợ đồng bộ hóa đồng thời :-) docs.aws.amazon.com/cli/latest/topic/…
python1981

70

Nếu không phiền khi sử dụng bảng điều khiển AWS, bạn có thể:

  1. Chọn tất cả các tệp / thư mục trong nhóm đầu tiên
  2. Nhấp vào Hành động> Sao chép
  3. Tạo một nhóm mới và chọn nó
  4. Nhấp vào Hành động> Dán

Nó vẫn khá chậm, nhưng bạn có thể để nó một mình và để nó làm việc của mình.


Đây có phải là việc sao chép nội dung của nhóm nguồn vào máy của tôi khi nó sao chép đến đích không? Có rất nhiều hoạt động mạng và trình kiểm tra trình duyệt cực kỳ chậm nên rất khó phân tích. 600K / s trên máy của tôi. Điều này sau đó sẽ nhanh hơn rất nhiều khi bắt đầu chuyển trong mạng amazon ... Thay vào đó, hãy thử ở đó.
Brad Goss

9
Tôi mới sử dụng phương pháp này ngày hôm nay. Nó không kéo các tệp xuống máy cục bộ của bạn - nó thực hiện sao chép trực tiếp và nhanh hơn rất nhiều.
Greg Benedict

7
Nó vẫn tìm nạp danh sách tệp. Nếu danh sách quá dài (hàng chục nghìn tệp trong trường hợp của tôi) thì nó sẽ chậm như điên. Và khả năng hết thời gian chờ / hang là rất cao
Phương Nguyễn

13
Thật không may, quá trình này được gắn với trình duyệt. :( Từ các tài liệu : "Sau khi bạn bắt đầu quá trình sao chép, bạn phải giữ cho mở trình duyệt trong khi các bản sao là theo tiến độ."
David Lemayian

4
Tôi đang cố gắng thực hiện việc này trên một thùng chứa 8 triệu tệp trong đó. Không biết có bao nhiêu tháng nó sẽ đưa tôi để chọn tất cả các hộp kiểm ...
Chris Harrison

27

Tôi đã thử sao chép hai nhóm bằng bảng điều khiển web AWS, s3cmdvà AWS CLI. Mặc dù các phương pháp này hầu hết đều hoạt động, nhưng chúng rất chậm.

Sau đó, tôi tìm thấy s3s3mirror: một công cụ chuyên dụng để đồng bộ hóa hai nhóm S3. Nó đa luồng và nhanh hơn rất nhiều so với các cách tiếp cận khác mà tôi đã thử. Tôi nhanh chóng di chuyển Giga-byte dữ liệu từ vùng AWS này sang vùng AWS khác.

Hãy xem tại https://github.com/cobbzilla/s3s3mirror hoặc tải xuống vùng chứa Docker từ https://registry.hub.docker.com/u/pmoust/s3s3mirror/


1
Nếu bạn có nhiều tệp cần chuyển, đây là công cụ tốt nhất cho công việc. Xấu hổ đó là cho đến nay xuống danh sách các câu trả lời ...
John Chrysostom

Lưu ý với một số người: Yêu cầu Java 6/7 để biên dịch.
Brian

1
Tôi đang sử dụng cái này từ một phiên bản EC2 và nó hoạt động nhanh không thể tin được! Tôi đã phải thay thế <source-bucket> và <destination-bucket> bằng tên nhóm thực (không phải điểm cuối hoặc một cái gì đó giống như trong AWS CLI).
ironmouse

1
Công cụ tuyệt vời, rất được khuyến khích so với những công cụ khác, dành cho số lượng lớn tệp. Kiểm soát số lượng chủ đề sao chép là tuyệt vời.
Shaunak

Bạn không nghĩ sẽ an toàn hơn khi sử dụng aws-cli chứ không phải các ứng dụng của bên thứ ba để thực hiện công việc? Sau cùng, chúng tôi cần cung cấp thông tin đăng nhập hoặc khóa truy cập để sử dụng các công cụ này.
Keet Sugathadasa

10

Đối với giải pháp adhoc, sử dụng aws cliđể đồng bộ hóa giữa các nhóm:

aws s3 synctốc độ phụ thuộc vào:
- độ trễ cho một lệnh gọi API tới điểm cuối S3
- số lượng lệnh gọi API được thực hiện đồng thời

Để tăng tốc độ đồng bộ:
- chạy aws s3 synctừ phiên bản AWS (c3.large trên FreeBSD là OK ;-))
- cập nhật ~ / .aws / config với:
- max_concurrent_requests = 128
-max_queue_size = 8096

với cấu hình và loại phiên bản sau, tôi có thể đồng bộ nhóm (309GB, 72K tệp, us-East-1) trong vòng 474 giây.

Để có giải pháp chung hơn, hãy xem xét - sao chép AWS DataPipeLine hoặc S3 chéo vùng.


Bạn có biết liệu tôi có thể mong đợi hiệu suất tương tự nếu tôi sử dụng cpu S3 không? Bạn có chắc chắn rằng khi bạn sử dụng đồng bộ hóa, nó thực sự chuyển tất cả 309GB không? đồng bộ hóa sẽ chỉ đồng bộ hóa các tệp không giống nhau hoặc có trong nhóm khác.
băng giá

Ngoài ra, bạn nghĩ gì về điều này đối với trường hợp sử dụng mà tôi có 1k tệp hoặc ít hơn, nhưng chúng có kích thước lớn hơn (10gb)? Bạn có nghĩ rằng tôi sẽ thấy hiệu suất tương tự như bạn?
băng giá

@frosty, trong trường hợp của tôi, nhóm đích đã trống. per awsclidoc - aws syncchỉ sao chép các tệp mới và cập nhật. có lẽ bạn sẽ mong đợi hiệu suất cao với aws cp(sao chép được thực hiện nội bộ, khách hàng của bạn chỉ đưa ra lệnh gọi API). hiệu suất phụ thuộc vào các yếu tố này: 1. độ trễ giữa các vùng src và dst (ví dụ: us-East-X sang us-west-X) 2. độ trễ giữa client của bạn và điểm cuối AWS API (tốc độ bạn có thể đưa ra lệnh gọi API) 3. số lượng yêu cầu đồng thời (bao nhiêu yêu cầu mỗi giây mà khách hàng của bạn có thể đưa ra). Trong trường hợp của tôi 309G đã được sao chép giữa xô trong cùng một khu vực (chúng tôi đông-1)
Tom Lime

3

Vì đây là lần đánh đầu tiên của Google về chủ đề này, thêm thông tin bổ sung.

'Cyno' đã tạo ra một phiên bản mới hơn của sửa đổi s3cmd, hiện hỗ trợ đồng bộ hóa bucket-to-bucket song song. Chính xác là những gì tôi đang chờ đợi.

Yêu cầu kéo có tại https://github.com/pcorliss/s3cmd-modification/pull/2 , phiên bản của anh ấy tại https://github.com/pearltrees/s3cmd-modification


s3cmd-modification đã tiết kiệm cho tôi số ngày sao chép.
gak

2

Tôi không biết bất kỳ công cụ dòng lệnh S3 nào khác nhưng nếu không có gì xuất hiện ở đây, có thể dễ dàng nhất để viết cho riêng bạn.

Chọn bất kỳ ngôn ngữ nào và Amazon SDK / Bộ công cụ mà bạn thích. Sau đó, bạn chỉ cần liệt kê / truy xuất nội dung nhóm nguồn và sao chép từng tệp (Rõ ràng là song song)

Nhìn vào nguồn cho s3cmd-modification (và tôi thừa nhận rằng tôi không biết gì về python), có vẻ như họ chưa song song mã bucket-to-bucket nhưng có lẽ bạn có thể sử dụng mã tải lên / tải xuống song song chuẩn làm điểm bắt đầu làm cái này.


Vâng. Tôi đã thử thách với ý tưởng này và viết nó bằng ruby ​​theo cách có sự kiện với máy sự kiện hoặc phân luồng với JRuby. Tuy nhiên, s3cmd đã khá hoàn chỉnh và tôi chỉ muốn sử dụng nó. Tôi đã nói chuyện với nhà phát triển của s3cmd và anh ấy có một vài giải pháp trong quá trình triển khai có khả năng giải quyết các vấn đề về hiệu suất.
Sean McCleary

1

một đơn giản aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursivehoạt động tốt (giả sử bạn đã thiết lập cli)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.