Как использовать новый комментатор волшебства паркета Hadoop для пользовательского сервера S3 с Spark - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть свечи 2.4.0 и Hadoop 3.1.1.Согласно Документация Hadoop , чтобы использовать новый коммиттер Magic, который позволяет последовательно записывать файлы паркета в S3, я установил эти значения в conf/spark-default.conf:

spark.sql.sources.commitProtocolClass       com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol
spark.sql.parquet.output.committer.class    org.apache.hadoop.mapreduce.lib.output.BindingPathOutputCommitter
spark.hadoop.mapreduce.outputcommitter.factory.scheme.s3a    org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory
spark.hadoop.fs.s3a.committer.name          magic
spark.hadoop.fs.s3a.committer.magic.enabled true

При использовании этогоКонфигурация, в которой я получаю исключение:

java.lang.ClassNotFoundException: com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol

У меня двойной вопрос. Во-первых, правильно ли я понимаю, что Hadoop 3.1.1 разрешает последовательную запись файла партера в S3?
Во-вторых, если я понялхорошо, как правильно использовать новый коммиттер из Spark?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Kiwy: это мой код: я могу помочь вам с этим.Некоторые из классов не попали в спар-релизы ASF, но вы найдете их в JAR-файлах Hadoop, и я мог бы попробовать построить релиз ASF с соответствующими зависимостями в (я мог бы поместить их в нисходящий поток; ониРаньше был там)

Вам не нужно, чтобы S3Guard был включен, чтобы использовать «staging committer»;это только «волшебный» вариант, который требует согласованных списков хранилищ объектов на этапе фиксации.

0 голосов
/ 20 ноября 2018

Редактировать:
ОК, у меня есть два экземпляра сервера, один из которых устарел, я попытался использовать последнюю версию minio с этими параметрами:

sc.hadoopConfiguration.set("hadoop.fs.s3a.path.style.access","true")
sc.hadoopConfiguration.set("hadoop.fs.s3a.fast.upload","true")
sc.hadoopConfiguration.set("hadoop.fs.s3a.fast.upload.buffer","bytebuffer")
sc.hadoopConfiguration.set("fs.s3a.path.style.access","true")
sc.hadoopConfiguration.set("fs.s3a.multipart.size","128M")
sc.hadoopConfiguration.set("fs.s3a.fast.upload.active.blocks","4")
sc.hadoopConfiguration.set("fs.s3a.committer.name","partitioned")

Пока я могу писать без проблем.
Однако мой swift-сервер, который немного старше этой конфигурации:

sc.hadoopConfiguration.set("fs.s3a.signing-algorithm","S3SignerType")

, похоже, не поддерживает должным образом partionner.

Относительно "Hadoop S3guard":
В настоящее время невозможно, чтобы Hadoop S3guard, хранящий метаданные файлов S3, был включен в Hadoop.S3guard, тем не менее, полагается на DynamoDB - проприетарную службу Amazon.
Сейчас нет альтернативы, например, файла sqlite или другой системы БД для хранения метаданных.
Так что, если вы используете S3 с minio или любую другую реализацию S3, вам не хватает DynamoDB.
Эта статья хорошо объясняет , как работает S3guard

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...