【问题标题】:Spark Streaming: avoid small files in HDFSSpark Streaming:避免 HDFS 中的小文件
【发布时间】:2018-11-15 04:31:06
【问题描述】:

我有一个将其输出写入 HDFS 的 Spark Streaming 应用程序。

我可以采取什么预防措施和策略来确保这个过程不会产生太多的小文件并在HDFS Namenode中造成内存压力。 Apache Spark 是否提供任何预先构建的解决方案来避免 HDFS 中的小文件。

【问题讨论】:

    标签: apache-spark hdfs spark-streaming


    【解决方案1】:

    没有。 Spark 不提供任何此类解决方案。

    你可以做什么:

    1. 增加批处理间隔 - 这将不能保证任何事情 - 但仍有更高的机会。虽然这里的权衡是流式传输会有更大的延迟
    2. 手动管理它。例如 - 在每个批次上,您可以计算 RDD 的大小并累积 RDD,除非它们满足您的大小要求。然后你只需合并 RDD 并写入磁盘。这会意外地增加延迟,但会保证有效的空间使用

    【讨论】:

      【解决方案2】:

      另一种解决方案也是获取另一个 Spark 应用程序,该应用程序每小时/每天/每周等重新聚合小文件。

      【讨论】:

        【解决方案3】:

        我知道这个问题很老,但将来可能对某人有用。

        另一种选择是将coalesce 与较少数量的分区一起使用。 coalesce 将分区合并在一起并创建更大的分区。由于写入期间分区数量的减少,这可能会增加流批处理的处理时间,但有助于减少文件数量。

        这会降低并行度,因此分区太少可能会导致流式作业出现问题。您将不得不为coalesce 使用不同的分区值进行测试,以找到最适合您的情况的值。

        【讨论】:

          【解决方案4】:

          您可以减少零件文件的数量。 默认情况下,spark 在 200 个零件文件中生成输出。您可以减少零件文件的数量。

          【讨论】:

            猜你喜欢
            • 2020-05-28
            • 2015-12-18
            • 2019-05-01
            • 2016-06-23
            • 1970-01-01
            • 2018-12-15
            • 1970-01-01
            • 2015-08-26
            • 2015-09-19
            相关资源
            最近更新 更多