【发布时间】:2018-11-15 04:31:06
【问题描述】:
我有一个将其输出写入 HDFS 的 Spark Streaming 应用程序。
我可以采取什么预防措施和策略来确保这个过程不会产生太多的小文件并在HDFS Namenode中造成内存压力。 Apache Spark 是否提供任何预先构建的解决方案来避免 HDFS 中的小文件。
【问题讨论】:
标签: apache-spark hdfs spark-streaming
我有一个将其输出写入 HDFS 的 Spark Streaming 应用程序。
我可以采取什么预防措施和策略来确保这个过程不会产生太多的小文件并在HDFS Namenode中造成内存压力。 Apache Spark 是否提供任何预先构建的解决方案来避免 HDFS 中的小文件。
【问题讨论】:
标签: apache-spark hdfs spark-streaming
没有。 Spark 不提供任何此类解决方案。
你可以做什么:
【讨论】:
另一种解决方案也是获取另一个 Spark 应用程序,该应用程序每小时/每天/每周等重新聚合小文件。
【讨论】:
我知道这个问题很老,但将来可能对某人有用。
另一种选择是将coalesce 与较少数量的分区一起使用。 coalesce 将分区合并在一起并创建更大的分区。由于写入期间分区数量的减少,这可能会增加流批处理的处理时间,但有助于减少文件数量。
这会降低并行度,因此分区太少可能会导致流式作业出现问题。您将不得不为coalesce 使用不同的分区值进行测试,以找到最适合您的情况的值。
【讨论】:
您可以减少零件文件的数量。 默认情况下,spark 在 200 个零件文件中生成输出。您可以减少零件文件的数量。
【讨论】: