Технически в чем разница между s3n, s3a и s3?


Я знаю о существовании https://wiki.apache.org/hadoop/AmazonS3 и следующие слова:

S3 Native FileSystem (URI scheme: s3n) собственная файловая система для чтения и записи обычных файлов на S3. Преимущество этой файловой системы заключается в том, что вы можете получить доступ к файлам на S3, которые были написаны с помощью других инструментов. И наоборот, другие инструменты могут получить доступ к файлам, написанным с помощью Hadoop. Недостатком является ограничение на размер файла 5 ГБ, наложенное S3.

S3A (URI scheme: s3a) преемник S3 Native, s3n fs, система S3a: использует библиотеки Amazon для взаимодействия с S3. Это позволяет S3a поддерживать большие файлы (не более 5 ГБ предел), более высокую производительность операций и многое другое. Файловая система предназначена для замены / преемника S3 Native: все объекты, доступные из S3n: / / URLs, также должны быть доступны из 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")

какова техническая разница, лежащая в основе этого изменения? Есть ли хорошие статьи, которые я могу прочитать об этом?

2 66

2 ответа:

Изменение буквы в схеме URI имеет большое значение, потому что оно вызывает использование другого программного обеспечения для интерфейса с S3. Что - то вроде разницы между http и https-это всего лишь однобуквенное изменение, но оно вызывает большую разницу в поведении.

разница между s3 и s3n/s3a заключается в том, что s3 является блоковым наложением поверх Amazon S3, а s3n/s3a-нет (они основаны на объектах).

разница между s3n и s3a заключается в том, что s3n поддерживает объекты размером до 5 ГБ, в то время как s3a поддерживает объекты размером до 5 ТБ и имеет более высокую производительность (оба из-за того, что он использует многосоставную загрузку). s3a является преемником s3n.

Если вы здесь, потому что хотите понять, какую файловую систему S3 вы должны использовать с Amazon EMR, то прочитайте в этой статье от Amazon (доступно только на wayback machine). Сеть: используйте s3: / / потому что s3: / / и s3n:// функционально взаимозаменяемы в контексте EMR, в то время как s3a: / / is не совместим с EMR.

для получения дополнительных советов, прочитайте работа с хранилищем и файловыми системами.

в 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 или более поздней версии, используйте С3А. Если вы используете 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 docs для получения дополнительной информации.