如何缓冲火花流的输出以防止产生数百万个小文件?

时间:2016-07-21 06:54:10

标签: hive hdfs spark-streaming

我正在使用spark stream定期从HDFS处理文件并将结果生成到HDFS。每个微批中的每个工人生成一个小文件。我想防止生成这么小的文件(输出格式是序列文件)。以下是一些可能的解决方案:

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

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

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

4-将键值对写入Hive并从中导出大文件。

但每个人都有自己的缺点:

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

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

3-合并双倍读取和写入hdfs。

4-根据Persisting Spark Streaming output,其表现是不可取的。

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

由于

0 个答案:

没有答案