Технічно яка різниця між s3n, s3a та s3?


121

Мені відомо про існування https://wiki.apache.org/hadoop/AmazonS3 та таких слів:

S3 Native FileSystem (схема URI: s3n) Нативна файлова система для читання та запису звичайних файлів на S3. Перевага цієї файлової системи полягає в тому, що ви можете отримати доступ до файлів на S3, записаних за допомогою інших інструментів. І навпаки, інші інструменти можуть отримати доступ до файлів, написаних за допомогою Hadoop. Недоліком є ​​обмеження в 5 Гб щодо розміру файлу, накладеного S3.

S3A (схема URI: s3a) Наступник S3 Native, s3n fs, система S3a: використовує бібліотеки Amazon для взаємодії з S3. Це дозволяє S3a підтримувати більші файли (не більше 5 Гб), більш високі операційні операції та багато іншого. Файлова система призначена для заміни / наступника S3 Native: всі об'єкти, доступні з s3n: // URL-адреси, також повинні бути доступні з s3a, просто замінивши схему URL-адрес.

Файлова система блоку S3 (схема URI: s3) Файлова система на основі блоку, підтримувана S3. Файли зберігаються у вигляді блоків, як і у HDFS. Це дозволяє ефективно виконувати перейменування. Ця файлова система вимагає, щоб ви виділили відро для файлової системи - ви не повинні використовувати існуюче відро, що містить файли, або писати інші файли до того ж відра. Файли, що зберігаються в цій файловій системі, можуть бути більшими за 5 Гб, але вони не сумісні з іншими інструментами 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 підтримує об'єкти розміром до 5 ГБ, тоді як s3a підтримує об'єкти розміром до 5 ТБ і має більш високу продуктивність (обидва тому, що він використовує багатозахисне завантаження). s3a є спадкоємцем s3n.

Якщо ви тут, тому що хочете зрозуміти, яку файлову систему S3 ви повинні використовувати з Amazon EMR, прочитайте цю статтю від Amazon (доступна лише на машині зворотного шляху). Мережа: використання s3: // тому, що s3: // і s3n: // функціонально взаємозамінні в контексті EMR, тоді як s3a: // не сумісний з EMR.

Для отримання додаткових порад читайте Робота зі сховищами та файловими системами .


13
Стаття про підтримку від Amazon як і раніше залишається актуальною, але тепер я можу писати на S3 із завдань EMR, використовуючи s3aсхему. Цілком можливо, що відповідь слід переглянути.
мл

1
@mig Хоча s3a може працювати, і, схоже, працює на моєму досвіді, AWS технічно не підтримує. Отже, я думаю, ви б використовували це на свій страх і ризик.
jarmod

@jarmod стаття, яку ви цитували тут, більше не працює. Чи зможете ви оновити посилання?
christang

@christang Схоже, це більше не доступно, тому вони забезпечили зворотне посилання на машині.
jarmod

2
В основному, підтримка AWS рекомендує s3: // un place of s3a: // для будь-якого квитка підтримки
Abhi

56

в Apache Hadoop "s3: //" посилається на оригінальний клієнт S3, який використовував нестандартну структуру для масштабування. Ця бібліотека застаріла і незабаром буде видалена,

s3n є його наступником, який використовував прямі назви шляху до об'єктів, тому ви можете читати та записувати дані з іншими програмами. Як і s3: //, він використовує jets3t.jar для спілкування з S3.

На службі EMR Amazon s3: // посилається на власного клієнта Amazon S3, який відрізняється. Шлях у 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 partition, працюють в одне завдання / байт. Ви не можете використовувати S3a для аналітичної роботи в Hadoop 2.6, навіть якщо операції з базовою файловою системою та генерація даних задоволені. Hadoop 2.7 це виправляє.

2018-01-10 Оновлення Hadoop 3.0 скоротив свої s3: та s3n реалізації: s3a - це все, що ви отримуєте. Зараз він значно кращий за свого попередника та виконує настільки ж добре, як реалізація Amazon. "S3:" Amazon все ще пропонується компанією EMR, яка є їх клієнтом із закритим джерелом. Проконсультуйтеся з документами EMR для отримання додаткової інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.