Мне известно о существовании 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")
Какая техническая разница лежит в основе этого изменения? Могу ли я прочитать об этом какие-нибудь хорошие статьи?
источник
s3a
схему. Возможно, ответ следует изменить.в 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 для получения дополнительной информации.
источник