我正在使用spark stream定期从HDFS处理文件并将结果生成到HDFS。每个微批中的每个工人生成一个小文件。我想防止生成这么小的文件(输出格式是序列文件)。以下是一些可能的解决方案:
1-每个工作人员缓冲自身的输出。当其缓冲区达到预定义阈值时,它会将其写入hdfs。
2-在每个微批次中使用重新分区来合并多个工人的输出,然后将它们写为单个文件。
3-使用另一个流作业将小文件合并为更大的文件。
4-将键值对写入Hive并从中导出大文件。
但每个人都有自己的缺点:
1-缓冲增加了磁盘访问。此外,在失败的情况下,必须再次处理大量输入。
2-重新分区会增加网络流量。而且,它可能仍然很小。
3-合并双倍读取和写入hdfs。
4-根据Persisting Spark Streaming output,其表现是不可取的。
我的问题:这个问题还有其他解决办法吗?这类问题的最佳做法是什么?
由于