我有一个Spark Streaming应用程序将其输出写入HDFS。
我可以采取哪些预防措施和策略来确保此过程不会生成太多小文件,并在HDFS Namenode中产生内存压力。 Apache Spark是否提供任何预先构建的解决方案以避免HDFS中的小文件。
答案 0 :(得分:1)
没有。 Spark不提供任何此类解决方案。
你能做什么:
答案 1 :(得分:1)
另一个解决方案也是让另一个Spark应用程序每小时/每天/每周重新集成小文件等。
答案 2 :(得分:0)
您可以减少零件文件的数量。 默认情况下,spark会在200个文件中生成输出。您可以减少零件文件的数量。
答案 3 :(得分:0)
我知道这个问题很旧,但将来可能对某人有用。
另一种选择是将coalesce
与较少的分区一起使用。 coalesce
将分区合并在一起,并创建更大的分区。由于减少了写入过程中的分区数量,因此可以增加流式批处理的处理时间,但有助于减少文件数量。
这将降低并行度,因此分区太少会导致Streaming作业出现问题。您将需要测试coalesce
的不同分区值,以找出哪种值最适合您的情况。