零件文件的大小对 Spark SQL 性能有影响吗
Does size of part files play a role for Spark SQL performance
我正在尝试查询具有大量零件文件 (avro) 的 hdfs。最近我们进行了更改以减少并行度,因此增加了部分文件的大小,每个部分文件的大小在 750MB 到 2 GB 之间(我们使用 spark streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。零件文件的数量大约为 500。我想知道这些零件文件的大小/零件文件的数量是否会对 spark SQL 性能产生影响?
如果需要,我可以提供更多信息。
HDFS、Map Reduce 和 SPARK 更喜欢尺寸较大的文件,而不是许多小文件。 S3 也有问题。我不确定你指的是 HDFS 还是 S3。
将较小的文件重新分区为较少数量的较大文件将 - 无需深入了解所有细节 - 允许 SPARK 或 MR 处理较少但较大的数据块,从而通过减少数量来提高作业速度map 任务需要读取它们,并由于减少浪费和名称节点争用问题而降低存储成本。
总而言之,小文件问题,大有可为。例如。 https://www.infoworld.com/article/3004460/application-development/5-things-we-hate-about-spark.html。需要说明的是,我是 Spark 的粉丝。
一般来说,文件越少越好,
一个问题是文件是否可以拆分,以及如何拆分。
- 无法拆分使用 .gz 压缩的文件:您必须从头到尾阅读,因此一次最多为一个工作人员分配一个文件(除了接近末尾的查询和推测可能会触发一秒)。使用像 snappy 这样的压缩,一切都很好
- 非常小的文件效率低下,因为 startup/commit 开销占主导地位
- 在 HDFS 上,小文件会给名称节点带来负载,因此运维团队可能不高兴
我正在尝试查询具有大量零件文件 (avro) 的 hdfs。最近我们进行了更改以减少并行度,因此增加了部分文件的大小,每个部分文件的大小在 750MB 到 2 GB 之间(我们使用 spark streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。零件文件的数量大约为 500。我想知道这些零件文件的大小/零件文件的数量是否会对 spark SQL 性能产生影响?
如果需要,我可以提供更多信息。
HDFS、Map Reduce 和 SPARK 更喜欢尺寸较大的文件,而不是许多小文件。 S3 也有问题。我不确定你指的是 HDFS 还是 S3。
将较小的文件重新分区为较少数量的较大文件将 - 无需深入了解所有细节 - 允许 SPARK 或 MR 处理较少但较大的数据块,从而通过减少数量来提高作业速度map 任务需要读取它们,并由于减少浪费和名称节点争用问题而降低存储成本。
总而言之,小文件问题,大有可为。例如。 https://www.infoworld.com/article/3004460/application-development/5-things-we-hate-about-spark.html。需要说明的是,我是 Spark 的粉丝。
一般来说,文件越少越好,
一个问题是文件是否可以拆分,以及如何拆分。
- 无法拆分使用 .gz 压缩的文件:您必须从头到尾阅读,因此一次最多为一个工作人员分配一个文件(除了接近末尾的查询和推测可能会触发一秒)。使用像 snappy 这样的压缩,一切都很好
- 非常小的文件效率低下,因为 startup/commit 开销占主导地位
- 在 HDFS 上,小文件会给名称节点带来负载,因此运维团队可能不高兴