Написание многих файлов для паркета из Spark - Отсутствует несколько файлов для паркета - PullRequest
0 голосов
/ 08 января 2019

Мы разработали работу, которая обрабатывает и записывает огромное количество файлов в паркет в Amazon S3 (s3a), используя Spark 2.3. Каждый исходный файл должен создавать отдельный раздел в S3. Код был протестирован (с меньшим количеством файлов) и работал как ожидалось.

Однако после выполнения с использованием реальных данных мы заметили, что некоторые файлы (небольшое количество от общего числа) не были записаны в паркет. Нет ошибок или чего-то странного в журналах. Мы снова протестировали код для отсутствующих файлов, и он заработал worked? Мы хотим использовать код в производственной среде, но нам нужно определить, в чем здесь проблема. Пишем паркет вот так:

dataframe_with_data_to_write.repartition($"field1", $"field2").write.option("compression", "snappy").option("basePath", path_out).partitionBy("field1", "field2", "year", "month", "day").mode(SaveMode.Append).parquet(path_out)

Мы использовали рекомендуемые параметры:

spark.sparkContext.hadoopConfiguration.set("mapreduce.output.fileoutputformat.compress", "true")
spark.sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")  
spark.sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.cleanup-failures.ignored", "true")
spark.conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

Есть ли известная проблема с использованием этих параметров? Может быть, что-то с возможной последовательностью S3? Есть предложения?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 января 2019

да, это известная проблема. Работа выполняется путем перечисления вывода в рабочем каталоге попытки и переименования в целевой каталог. Если этот список занижает размер файла: вывод отсутствует. Если в этом списке перечислены файлы, которых там нет, фиксация завершится неудачей.

Исправления в выпусках ASF Hadoop.

  1. разъемы hadoop-2.7-2.8. Запись в HDFS, копирование файлов
  2. Hadoop 2.9-3.0 включает S3Guard для согласованного листинга S3 (для этого используется DynamoDB)
  3. Hadoop 3.1, переключитесь на коммиттеры S3A , которые разработаны с учетом проблем согласованности и производительности. «Постановочный» от netflix - самый простой в использовании.

Дополнительное чтение: Коммиттер с нулевым переименованием .

Обновление 11-01-2019, у Amazon есть собственная реализация ASF с нулевым переименованием для фиксации с закрытым исходным кодом . Спросите команду EMR для их собственных доказательств правильности, поскольку остальные из нас не могут проверить это.

...