Технически в чем разница между 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: все объекты, доступные из URL-адресов s3n: //, также должны быть доступны из 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.

Дополнительные советы см. В разделе Работа с хранилищами и файловыми системами .

jarmod
источник
13
Статья поддержки от Amazon все еще актуальна, но теперь я могу писать в S3 из заданий EMR, используя эту s3aсхему. Возможно, ответ следует изменить.
mlg
1
@mig Хотя s3a может работать, и, судя по моему опыту, он действительно работает, технически он не поддерживается AWS. Так что я думаю, вы воспользуетесь им на свой страх и риск.
jarmod
@jarmod статья, которую вы здесь процитировали, больше не работает. Сможете ли вы обновить ссылку?
Christang 03
@christang Похоже, он больше не доступен, поэтому предоставили обратную ссылку на машину.
jarmod
2
По сути, служба поддержки AWS рекомендует s3: // un вместо s3a: // для любого обращения в службу поддержки
Abhi
56

в Apache Hadoop «s3: //» относится к исходному клиенту S3, который использовал нестандартную структуру для масштабируемости. Эта библиотека устарела и скоро будет удалена,

s3n - его преемник, который использовал прямые имена путей к объектам, поэтому вы можете читать и записывать данные с помощью других приложений. Как и s3: //, он использует jets3t.jar для взаимодействия с S3.

В сервисе Amazon EMR s3: // относится к собственному клиенту Amazon S3, который отличается. Путь в s3: // в EMR указывает непосредственно на объект в хранилище объектов.

В Apache Hadoop S3N и S3A являются соединителями с S3, а S3A является преемником, созданным с использованием собственного SDK AWS от 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. Amazon s3: по-прежнему предлагается EMR, их клиентом с закрытым исходным кодом. Обратитесь к документации EMR для получения дополнительной информации.

stevel
источник