ความแตกต่างระหว่าง s3n, s3a และ s3 ในทางเทคนิคคืออะไร?


121

ฉันตระหนักถึงการมีอยู่ของhttps://wiki.apache.org/hadoop/AmazonS3และคำต่อไปนี้:

S3 Native FileSystem (URI Scheme: s3n) ระบบไฟล์เนทีฟสำหรับการอ่านและเขียนไฟล์ปกติบน S3 ข้อดีของระบบไฟล์นี้คือคุณสามารถเข้าถึงไฟล์บน S3 ที่เขียนด้วยเครื่องมืออื่น ๆ ในทางกลับกันเครื่องมืออื่น ๆ สามารถเข้าถึงไฟล์ที่เขียนโดยใช้ Hadoop ข้อเสียคือขีด จำกัด 5GB สำหรับขนาดไฟล์ที่กำหนดโดย S3

S3A (โครงร่าง URI: s3a) ตัวต่อจาก S3 Native, s3n fs, S3a: ระบบใช้ไลบรารีของ Amazon เพื่อโต้ตอบกับ S3 สิ่งนี้ช่วยให้ S3a รองรับไฟล์ขนาดใหญ่ (ไม่ จำกัด 5GB) การทำงานที่มีประสิทธิภาพสูงขึ้นและอื่น ๆ ระบบไฟล์มีจุดมุ่งหมายเพื่อแทนที่ / สืบต่อจาก S3 Native: อ็อบเจ็กต์ทั้งหมดที่เข้าถึงได้จาก s3n: // URL ควรสามารถเข้าถึงได้จาก s3a เพียงแค่แทนที่สคีมา URL

S3 Block FileSystem (URI Scheme: s3) ระบบไฟล์แบบบล็อกที่ได้รับการสนับสนุนโดย S3 ไฟล์จะถูกจัดเก็บเป็นบล็อกเช่นเดียวกับที่อยู่ใน HDFS สิ่งนี้อนุญาตให้ใช้การเปลี่ยนชื่อได้อย่างมีประสิทธิภาพ ระบบไฟล์นี้กำหนดให้คุณต้องอุทิศที่เก็บข้อมูลสำหรับระบบไฟล์ - คุณไม่ควรใช้ที่เก็บข้อมูลที่มีอยู่ซึ่งมีไฟล์อยู่หรือเขียนไฟล์อื่นลงในที่เก็บข้อมูลเดียวกัน ไฟล์ที่จัดเก็บโดยระบบไฟล์นี้อาจมีขนาดใหญ่กว่า 5GB แต่ไม่สามารถทำงานร่วมกับเครื่องมือ S3 อื่น ๆ ได้

เหตุใดการเปลี่ยนตัวอักษรใน URI จึงสามารถสร้างความแตกต่างได้ ตัวอย่างเช่น

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

ถึง

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

อะไรคือความแตกต่างทางเทคนิคที่อยู่ภายใต้การเปลี่ยนแปลงนี้ มีบทความดีๆที่ฉันสามารถอ่านได้หรือไม่?

คำตอบ:


136

การเปลี่ยนตัวอักษรในโครงร่าง URI สร้างความแตกต่างอย่างมากเนื่องจากทำให้ซอฟต์แวร์ต่าง ๆ ที่ใช้ในการเชื่อมต่อกับ S3 ค่อนข้างเหมือนความแตกต่างระหว่าง http และ https - เป็นการเปลี่ยนแปลงเพียงตัวอักษรเดียว แต่ก่อให้เกิดความแตกต่างอย่างมากในพฤติกรรม

ความแตกต่างระหว่าง s3 และ s3n / s3a คือ s3 เป็นโอเวอร์เลย์แบบบล็อกที่ด้านบนของ Amazon S3 ในขณะที่ s3n / s3a ไม่ใช่ (เป็นแบบอ็อบเจ็กต์)

ความแตกต่างระหว่าง s3n และ s3a คือ s3n รองรับออบเจ็กต์ที่มีขนาดไม่เกิน 5GB ในขณะที่ s3a รองรับออบเจ็กต์ได้สูงสุด 5TB และมีประสิทธิภาพสูงกว่า (ทั้งสองอย่างเป็นเพราะใช้การอัปโหลดหลายส่วน) s3a เป็นตัวตายตัวแทนของ s3n

หากคุณมาที่นี่เพราะต้องการทำความเข้าใจระบบไฟล์ S3 ที่คุณควรใช้กับ Amazon EMR ให้อ่านบทความนี้จาก Amazon (มีเฉพาะในเครื่องสำรองเท่านั้น) net คือ: ใช้ s3: // เนื่องจาก s3: // และ s3n: // สามารถใช้แทนกันได้ในบริบทของ EMR ในขณะที่ s3a: // ไม่สามารถใช้งานร่วมกับ EMR ได้

สำหรับคำแนะนำเพิ่มเติมโปรดอ่านWork with Storage and File Systemsการทำงานกับการจัดเก็บและระบบไฟล์


13
บทความสนับสนุนจาก Amazon ดูเหมือนจะเป็นข้อมูลล่าสุด แต่ตอนนี้ฉันสามารถเขียนถึง S3 จากงาน EMR โดยใช้s3aโครงร่างได้ เป็นไปได้ว่าควรแก้ไขคำตอบ
mlg

1
@mig แม้ว่า s3a อาจใช้งานได้และดูเหมือนจะใช้ได้ผลในประสบการณ์ของฉัน แต่ AWS ไม่ได้รับการสนับสนุนทางเทคนิค ดังนั้นฉันคิดว่าคุณจะใช้มันโดยยอมรับความเสี่ยงเอง
jarmod

@jarmod บทความที่คุณอ้างถึงที่นี่ใช้ไม่ได้อีกต่อไป คุณจะสามารถอัปเดตลิงก์ได้หรือไม่?
christang

@christang ดูเหมือนว่าจะไม่มีให้บริการอีกต่อไปจึงได้ให้ลิงค์เครื่องทางกลับ
jarmod

2
โดยทั่วไปฝ่ายสนับสนุนของ AWS แนะนำให้ใช้ s3: // un แทนที่ s3a: // สำหรับตั๋วสนับสนุนใด ๆ
Abhi

56

ใน Apache Hadoop "s3: //" หมายถึงไคลเอ็นต์ S3 ดั้งเดิมซึ่งใช้โครงสร้างที่ไม่ได้มาตรฐานสำหรับความสามารถในการขยายขนาด ห้องสมุดนั้นเลิกใช้งานและจะถูกลบในไม่ช้า

s3n เป็นตัวต่อซึ่งใช้ชื่อพา ธ โดยตรงไปยังอ็อบเจ็กต์ดังนั้นคุณสามารถอ่านและเขียนข้อมูลด้วยแอปพลิเคชันอื่น ๆ เช่นเดียวกับ s3: // ใช้ jets3t.jar เพื่อคุยกับ S3

ในบริการ EMR ของ Amazon s3: // หมายถึงไคลเอ็นต์ S3 ของ Amazon เองซึ่งแตกต่างกัน เส้นทางใน s3: // บน EMR อ้างถึงวัตถุในที่เก็บอ็อบเจ็กต์โดยตรง

ใน Apache Hadoop S3N และ S3A ต่างก็เป็นตัวเชื่อมต่อกับ S3 โดย S3A เป็นตัวต่อที่สร้างขึ้นโดยใช้ AWS SDK ของ Amazon เอง ทำไมต้องชื่อใหม่ ดังนั้นเราจึงสามารถจัดส่งแบบเคียงข้างกับเรือที่มั่นคง S3A เป็นที่ที่ดำเนินการอย่างต่อเนื่องเกี่ยวกับความสามารถในการปรับขนาดประสิทธิภาพความปลอดภัยและอื่น ๆ S3N ถูกปล่อยให้อยู่คนเดียวดังนั้นเราจึงไม่ทำลายมัน S3A จัดส่งใน Hadoop 2.6 แต่ยังคงมีความเสถียรจนถึง 2.7 ซึ่งส่วนใหญ่มีปัญหาเล็กน้อยในการทำพื้นผิว

หากคุณใช้ Hadoop 2.7 หรือใหม่กว่าให้ใช้ s3a หากคุณใช้ Hadoop 2.5 หรือเก่ากว่า s3n หากคุณใช้ Hadoop 2.6 เป็นตัวเลือกที่ยากกว่า - ฉันจะลองใช้ s3a และเปลี่ยนกลับไปใช้ s3n หากมีปัญหา -

สำหรับประวัติเพิ่มเติมโปรดดูhttp://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

2017-03-14 อัปเดตจริงการแบ่งพาร์ติชันบน S3a ใน Hadoop 2.6 ใช้ไม่ได้เนื่องจากขนาดบล็อกที่ส่งคืนในการlistFiles()โทรคือ 0: สิ่งต่างๆเช่น Spark & ​​pig แบ่งงานเป็นงาน / ไบต์เดียว คุณไม่สามารถใช้ S3a สำหรับงานวิเคราะห์ใน Hadoop 2.6 แม้ว่าการดำเนินการของระบบไฟล์หลักและการสร้างข้อมูลจะมีความสุข Hadoop 2.7 แก้ไขปัญหานั้น

2018-01-10 อัปเดต Hadoop 3.0 ได้ตัดการใช้งาน s3: และ s3n: s3a คือทั้งหมดที่คุณได้รับ ตอนนี้ดีกว่ารุ่นก่อนอย่างเห็นได้ชัดและทำงานได้ดีพอ ๆ กับการใช้งาน Amazon "s3:" ของ Amazon ยังคงให้บริการโดย EMR ซึ่งเป็นไคลเอนต์ปิด ศึกษาเอกสาร EMRสำหรับข้อมูลเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.