我们开发了一个任务,使用Spark 2.3在Amazon S3(s3a)上处理和写入大量parquet文件。每个源文件应该在S3中创建一个不同的分区。代码已经过测试(使用较少的文件),并且按预期工作。
然而,在使用真实数据执行后,我们注意到一些文件(总数很少)未被写入parquet。日志中没有错误或任何奇怪的东西。我们针对缺失的文件再次测试了代码,它奇怪地工作了?我们想在生产环境中使用这段代码,但需要检测问题的原因。我们是这样写入parquet的:
我们使用了推荐的参数:
然而,在使用真实数据执行后,我们注意到一些文件(总数很少)未被写入parquet。日志中没有错误或任何奇怪的东西。我们针对缺失的文件再次测试了代码,它奇怪地工作了?我们想在生产环境中使用这段代码,但需要检测问题的原因。我们是这样写入parquet的:
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事件一致性有关?您有什么建议吗?
非常感谢您的帮助。