Hive 如何缓冲spark流的输出以防止生成数以百万计的小文件?

Hive 如何缓冲spark流的输出以防止生成数以百万计的小文件?,hive,hdfs,spark-streaming,Hive,Hdfs,Spark Streaming,我使用spark stream定期处理来自HDFS的文件,并向HDFS生成结果。每个微批次中的每个工作人员生成一个小文件。我想防止生成这样的小文件(输出格式是序列文件)。以下是一些潜在的解决方案: 1-每个工人缓冲其自身的输出。当其缓冲区达到预定义的阈值时,它会将其写入hdfs 2-在每个微批中使用重新分区来合并多个worker的输出,然后将它们作为单个文件写入 3-使用另一个流作业将小文件合并为大文件 4-将键值对写入配置单元并从中导出大文件 但每种方法都有自己的缺点: 1-缓冲增加了磁盘访问

我使用spark stream定期处理来自HDFS的文件,并向HDFS生成结果。每个微批次中的每个工作人员生成一个小文件。我想防止生成这样的小文件(输出格式是序列文件)。以下是一些潜在的解决方案:

1-每个工人缓冲其自身的输出。当其缓冲区达到预定义的阈值时,它会将其写入hdfs

2-在每个微批中使用重新分区来合并多个worker的输出,然后将它们作为单个文件写入

3-使用另一个流作业将小文件合并为大文件

4-将键值对写入配置单元并从中导出大文件

但每种方法都有自己的缺点:

1-缓冲增加了磁盘访问。此外,在发生故障的情况下,必须再次处理大量输入

2-重新分区会增加网络流量。此外,它可能仍然很小

3-合并使hdfs的读写次数加倍

4-根据其性能,这是不可取的

我的问题:这个问题还有其他解决办法吗。解决此类问题的最佳做法是什么


谢谢

你有没有找到答案?因为我的HDFS版本是1.2.1,所以我选择了选项3。在Hadoop2.xHDFS中,支持追加功能,但我不测试它。