Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从Spark向拼花写入许多文件-缺少一些拼花文件_Apache Spark_Amazon S3_Parquet - Fatal编程技术网

Apache spark 从Spark向拼花写入许多文件-缺少一些拼花文件

Apache spark 从Spark向拼花写入许多文件-缺少一些拼花文件,apache-spark,amazon-s3,parquet,Apache Spark,Amazon S3,Parquet,我们开发了一个作业,使用Spark 2.3在Amazon S3(s3a)的拼花中处理和写入大量文件。每个源文件都应该在S3中创建不同的分区。代码经过测试(使用较少的文件)并按预期工作 然而,在使用真实数据执行后,我们注意到一些文件(总数的一小部分)没有写入拼花地板。日志中没有错误或任何奇怪的东西。我们再次测试了丢失的文件的代码,它成功了吗?。我们希望在生产环境中使用代码,但我们需要检测这里的问题。我们写信给拼花地板如下: dataframe_with_data_to_write.repartit

我们开发了一个作业,使用Spark 2.3在Amazon S3(s3a)的拼花中处理和写入大量文件。每个源文件都应该在S3中创建不同的分区。代码经过测试(使用较少的文件)并按预期工作

然而,在使用真实数据执行后,我们注意到一些文件(总数的一小部分)没有写入拼花地板。日志中没有错误或任何奇怪的东西。我们再次测试了丢失的文件的代码,它成功了吗?。我们希望在生产环境中使用代码,但我们需要检测这里的问题。我们写信给拼花地板如下:

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")
使用此参数是否存在已知的bug问题?也许是有一致性的东西?有什么建议吗


任何帮助都将不胜感激。

是的,这是一个已知的问题。通过在尝试工作目录中列出输出并重命名到目标目录中来提交工作。如果该列表未报告文件:输出丢失。如果该列表列出了不存在的文件,则提交失败

ASF Hadoop发行版上的修复程序

  • hadoop-2.7-2.8连接器。写入HDFS,复制文件
  • Hadoop 2.9-3.0启用S3Guard以获得一致的S3列表(使用DynamoDB)
  • Hadoop 3.1,切换到它的设计考虑了一致性和性能问题。netflix的“登台”是这里最简单的
  • 进一步阅读:

    更新日期:2019年11月1日,亚马逊有自己的ASF封闭源代码实现。请EMR团队提供他们自己的正确性证明,因为我们其他人无法验证这一点

    更新日期:2020年12月11日:AmazonS3现在完全一致,所以列表将是最新的和正确的;不再更新不一致性和404缓存

    • v1提交算法仍然不安全,因为目录重命名是非原子的
    • v2提交算法在逐个重命名文件时总是被破坏
    • 重命名是S3上缓慢的O(数据)复制操作,因此任务提交期间的失败窗口更大

    您不再面临数据丢失的风险,但是性能非常糟糕,任务提交期间的失败没有得到正确处理

    感谢您的回答,我们使用的是EMR和hadoop is 2.8.5,请您详细说明“写入hdfs,复制文件”。我们是否应该将拼花地板文件写入hdfs,然后将其复制到S3?如果是这样的话,Spark如何做到这一点?事实上,最新版本的EMR现在为Spark提供了自己的“零重命名提交人”——请查看发行说明。我会更新这个评论的谢谢,是的,这就是我们要找的。我们认为这解决了问题。这里有一个链接供将来参考:@SteveLoughran-我们正在使用hadoop2.7,不久将转向hadoop2.9,而s3guard可以解决一致性问题,但s3A提交者将无法解决提交问题()。有没有办法在hadoop2.9中使用s3a提交器或类似的工具?