Является ли искровая конечная точка поддержки s3n похожей на s3a - PullRequest
0 голосов
/ 12 марта 2019

У меня есть сервер конечной точки, который нормально работает для файловой системы s3a в спарк, теперь я хочу поддерживать s3n:// и s3://

У кого-нибудь есть предложения для достижения этой цели?

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Я нашел ниже свойства в spark для установки конечной точки для s3n и s3, и это работает для меня spark.hadoop.fs.s3.endpoint = http://endpoint_host:port spark.hadoop.fs.s3n.endpoint = http://endpoint_host:port

0 голосов
/ 19 марта 2019
  1. Никому не нужно устанавливать fs.s3X.impl для любого значения X. Это предопределено в файле core-default.xml в hadoop-common. Это правило «ты должен это объявить» - просто некое суеверие, переданное людьми, которые никогда не пробовали ничего другого.

  2. S3n уже устарел к моменту поставки hadoop-2.7 (обычно это версия, поставляемая в комплекте с Spark) и вообще не обслуживался с момента выпуска hadoop-2.6. Он был удален из самых последних версий, поскольку ожидается, что все мигрировали.

  3. Имеет фундаментальные ограничения, в том числе

    • жестокая обработка seek() операций с большими файлами (базовая библиотека теперь читает до конца файла при каждом обратном поиске. Это снижает производительность для столбчатых данных ORC / Parquet.
    • нет поддержки протокола аутентификации v4, поэтому нет поддержки AWS во Франкфурте, Сеуле, Лондоне и т. Д.
    • без поддержки шифрования
    • нет поддержки восстановления временных сбоев
    • нет поддержки распараллеленных и добавочных загрузок больших файлов. S3A записывает файлы блок за один раз, пока вывод еще генерируется

Из-за этих проблем и того, что они устарели, все ошибки, связанные с s3n в ASF JIRA, закрываются как WONTFIX.

Просто отойдите от s3n, перейдите на s3a. Ваша жизнь станет лучше.

Знайте, что при использовании s3a версия библиотек AWS и всех JAR-файлов hadoop- * должны быть синхронизированы. JAR-файлы hadoop- * полагаются на синхронизацию друг с другом, а JAR-файлы aws- * со временем становятся достаточно хрупкими, поэтому при каждом обновлении hadoop требуется серьезное повторное тестирование, часто изменения в API, ошибки в команде AWS SDK и т. д. будет создавать только необычные трассировки стека, которые закрываются как недействительные: «не делайте этого тогда».

Теперь, если вы действительно хотите протестировать поддержку s3n,

  1. проверьте исходное дерево hadoop для версии hadoop, с которой нужно запустить spark,
  2. Следуйте инструкциям по тестированию для тестирования s3a & s3n относительно вашей конечной точки.
  3. Особенно бит для тестирования с сервисами не AWS S3 .
  4. Для лучшего тестирования s3a, проверьте магистраль hadoop и тоже запустите эти тесты.

Как уже отмечалось, проблемы с s3n не будут исправлены. Твоя домашняя работа. Возможно, S3A, но вам придется показать, что это ошибка самой библиотеки s3a.

0 голосов
/ 12 марта 2019

Вопрос: похожа ли конечная точка поддержки spark s3n на s3a?

Ответ: Да.

Ниже приведены классы, которые вы должны предоставить в конфигурации, начиная с hadoop-aws.jar.

 org.apache.hadoop.fs.s3native.NativeS3FileSystem, org.apache.hadoop.fs.s3.S3FileSystem 

Декларативный способ:

В core-site.xml

<property>
  <name>fs.s3.impl</name>
  <value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>

<property>
  <name>fs.s3n.impl</name>
  <value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>

или вы можете установить их программно, как показано ниже.

Программный способ:

Пример:

spark.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
    spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "AccessKey")
    spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "SecretKey")

аналогично s3: // также.

hadoop-aws.jar содержит эти классы, так что вам нужно предоставить jar для вашей работы spark-submit, используя ...

--jars /usr/hadoop/hadoop-aws.jar

Дальнейшее чтение здесь

...