Về mặt kỹ thuật sự khác biệt giữa s3n, s3a và s3 là gì?


121

Tôi biết về sự tồn tại của https://wiki.apache.org/hadoop/AmazonS3 và những từ sau:

S3 Native FileSystem (Lược đồ URI: s3n) Một hệ thống tệp gốc để đọc và ghi các tệp thông thường trên S3. Ưu điểm của hệ thống tệp này là bạn có thể truy cập các tệp trên S3 đã được viết bằng các công cụ khác. Ngược lại, các công cụ khác có thể truy cập các tệp được viết bằng Hadoop. Điểm bất lợi là giới hạn 5GB về kích thước tệp do S3 áp đặt.

S3A (Lược đồ URI: s3a) Kế thừa cho S3 Native, s3n fs, S3a: system sử dụng các thư viện của Amazon để tương tác với S3. Điều này cho phép S3a hỗ trợ các tệp lớn hơn (không giới hạn 5 GB), hoạt động hiệu suất cao hơn và hơn thế nữa. Hệ thống tệp được thiết kế để thay thế / kế nhiệm cho S3 Native: tất cả các đối tượng có thể truy cập từ s3n: // URL cũng phải có thể truy cập được từ s3a chỉ bằng cách thay thế lược đồ URL.

Hệ thống tệp tin khối S3 (Lược đồ URI: s3) Hệ thống tệp tin dựa trên khối được S3 hỗ trợ. Các tệp được lưu trữ dưới dạng khối, giống như chúng ở HDFS. Điều này cho phép thực hiện hiệu quả việc đổi tên. Hệ thống tệp này yêu cầu bạn cung cấp một nhóm cho hệ thống tệp - bạn không nên sử dụng một nhóm hiện có chứa các tệp hoặc ghi các tệp khác vào cùng một nhóm. Các tệp được hệ thống tệp này lưu trữ có thể lớn hơn 5GB, nhưng chúng không thể tương thích với các công cụ S3 khác.

Tại sao một thay đổi chữ cái trên URI có thể tạo ra sự khác biệt như vậy? Ví dụ

val data = sc.textFile("s3n://bucket-name/key")

đến

val data = sc.textFile("s3a://bucket-name/key")

Sự khác biệt kỹ thuật cơ bản thay đổi này là gì? Có bất kỳ bài báo tốt mà tôi có thể đọc về điều này?

Câu trả lời:


136

Sự thay đổi chữ cái trên lược đồ URI tạo ra sự khác biệt lớn vì nó khiến các phần mềm khác nhau được sử dụng để giao tiếp với S3. Hơi giống sự khác biệt giữa http và https - chỉ là một thay đổi có một ký tự, nhưng nó gây ra sự khác biệt lớn về hành vi.

Sự khác biệt giữa s3 và s3n / s3a là s3 là lớp phủ dựa trên khối trên Amazon S3, trong khi s3n / s3a thì không (chúng dựa trên đối tượng).

Sự khác biệt giữa s3n và s3a là s3n hỗ trợ các đối tượng có kích thước lên đến 5GB, trong khi s3a hỗ trợ các đối tượng lên đến 5TB và có hiệu suất cao hơn (cả hai đều do nó sử dụng tải lên nhiều phần). s3a là kế thừa của s3n.

Nếu bạn ở đây vì bạn muốn hiểu bạn nên sử dụng hệ thống tệp S3 nào với Amazon EMR, thì hãy đọc bài viết này từ Amazon (chỉ có sẵn trên máy quay lại). Mạng là: sử dụng s3: // vì s3: // và s3n: // có thể hoán đổi chức năng cho nhau trong bối cảnh EMR, trong khi s3a: // không tương thích với EMR.

Để được tư vấn thêm, hãy đọc Làm việc với Hệ thống Lưu trữ và Tệp .


13
Bài viết hỗ trợ từ Amazon dường như vẫn được cập nhật, nhưng bây giờ tôi có thể viết cho S3 từ các công việc EMR bằng cách sử dụng s3alược đồ. Có thể câu trả lời nên được sửa đổi.
mlg

1
@mig Mặc dù s3a có thể hoạt động và nó dường như hoạt động theo kinh nghiệm của tôi, nhưng về mặt kỹ thuật nó không được AWS hỗ trợ. Vì vậy, tôi nghĩ bạn sẽ tự chịu rủi ro khi sử dụng nó.
jarmod

@jarmod bài viết bạn đã trích dẫn ở đây không còn hoạt động. Bạn có thể cập nhật liên kết không?
christang

@christang Có vẻ như nó không còn nữa nên đã cung cấp liên kết máy quay lại.
jarmod

2
Về cơ bản, bộ phận hỗ trợ AWS đề xuất s3: // un place of s3a: // cho bất kỳ phiếu hỗ trợ nào
Abhi

56

trong Apache Hadoop, "s3: //" đề cập đến ứng dụng khách S3 ban đầu, sử dụng cấu trúc không chuẩn để có khả năng mở rộng. Thư viện đó không còn được dùng nữa và sắp bị xóa,

s3n là người kế nhiệm của nó, đã sử dụng tên đường dẫn trực tiếp đến các đối tượng, vì vậy bạn có thể đọc và ghi dữ liệu với các ứng dụng khác. Giống như s3: //, nó sử dụng jets3t.jar để nói chuyện với S3.

Trên dịch vụ EMR của Amazon, s3: // đề cập đến ứng dụng khách S3 của chính Amazon, điều này khác. Một đường dẫn trong s3: // trên EMR tham chiếu trực tiếp đến một đối tượng trong kho lưu trữ đối tượng.

Trong Apache Hadoop, S3N và S3A đều là trình kết nối với S3, với S3A là phiên bản kế nhiệm được xây dựng bằng AWS SDK của riêng Amazon. Tại sao tên mới? vì vậy chúng tôi có thể gửi nó song song với một cái đã ổn định. S3A là nơi diễn ra tất cả các công việc liên tục về khả năng mở rộng, hiệu suất, bảo mật, v.v. S3N được để một mình nên chúng tôi không phá vỡ nó. S3A xuất xưởng trong Hadoop 2.6, nhưng vẫn ổn định cho đến 2.7, chủ yếu với một số vấn đề quy mô nhỏ xuất hiện.

Nếu bạn đang sử dụng Hadoop 2.7 trở lên, hãy sử dụng s3a. Nếu bạn đang sử dụng Hadoop 2.5 trở xuống. s3n, Nếu bạn đang sử dụng Hadoop 2.6, đó là một lựa chọn khó khăn hơn. -Tôi sẽ thử s3a và chuyển về s3n nếu có vấn đề-

Để biết thêm về lịch sử, hãy xem http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

2017-03-14 Cập nhật thực tế, phân vùng bị hỏng trên S3a trong Hadoop 2.6, vì kích thước khối được trả về trong một listFiles()lệnh gọi là 0: những thứ như Spark & ​​pig phân vùng công việc thành một tác vụ / byte. Bạn không thể sử dụng S3a cho công việc phân tích trong Hadoop 2.6, ngay cả khi các hoạt động và tạo dữ liệu của hệ thống tệp cốt lõi là hài lòng. Hadoop 2.7 khắc phục điều đó.

2018-01-10 Cập nhật Hadoop 3.0 đã cắt giảm triển khai s3: và s3n: s3a là tất cả những gì bạn nhận được. Nó hiện tốt hơn đáng kể so với người tiền nhiệm của nó và hoạt động kém hơn so với việc triển khai của Amazon. "S3:" của Amazon vẫn được cung cấp bởi EMR, ứng dụng khách nguồn đóng của họ. Tham khảo tài liệu EMR để biết thêm thông tin.

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.