我正在尝试查询具有很多部分文件(avro)的 hdfs。最近我们进行了更改以减少并行度,因此零件文件的大小增加了,每个零件文件的大小在 750MB 到 2 GB 的范围内(我们使用 Spark Streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。部分文件的数量约为 500。我想知道这些部分文件的大小/部分文件的数量是否会对 spark SQL 性能起任何作用?
如果需要,我可以提供更多信息。
我正在尝试查询具有很多部分文件(avro)的 hdfs。最近我们进行了更改以减少并行度,因此零件文件的大小增加了,每个零件文件的大小在 750MB 到 2 GB 的范围内(我们使用 Spark Streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。部分文件的数量约为 500。我想知道这些部分文件的大小/部分文件的数量是否会对 spark SQL 性能起任何作用?
如果需要,我可以提供更多信息。
HDFS、Map Reduce 和 SPARK 更喜欢大小较大的文件,而不是许多小文件。S3 也有问题。我不确定您在这里是指 HDFS 还是 S3。
将较小的文件重新分区为较少数量的较大文件 - 无需深入了解所有细节 - 允许 SPARK 或 MR 处理较少但较大的数据块,从而通过减少需要读取的映射任务数量来提高作业速度并且由于更少的浪费和名称节点争用问题而降低了存储成本。
总而言之,小文件问题有很多值得阅读的地方。例如https://www.infoworld.com/article/3004460/application-development/5-things-we-hate-about-spark.html。需要明确的是,我是 Spark 的粉丝。
一般来说,文件越少越好,
一个问题是文件是否可以拆分,以及如何拆分。