知识卡片
小文件问题与分区数控制
内容
分布式计算引擎默认按固定分区数并行写入结果,如果实际数据量不大,就会在HDFS上产生大量体积很小的文件。小文件一多,一方面拖慢下游任务的调度,另一方面也给分布式文件系统的元数据管理造成压力。解法是写入前用重分区操作主动收窄分区数,把内容合并进更少但更大的文件里再落盘。这提醒一个容易被忽略的点:默认并行度是为”数据量足够大”假设的,数据量小的场景反而要手动收窄,而不是任由框架按默认值切分。
参考来源
- 位置:《用户画像:方法论与工程化解决方案》第5章《开发性能调优》(源文件:_epub-src/OEBPS/text00086.html)
- 结论依据:原文围绕“在Spark内部会对每一个分区分配一个task执行,如果task过多,那么每个tas”给出定义、场景或处理方式,支撑卡片对“小文件问题与分区数控制”的概括。
- 原始内容:在Spark内部会对每一个分区分配一个task执行,如果task过多,那么每个task处理的数据量很小,这就会造成线程频繁在task之间切换,导致集群工作效率低下。为解决这个问题,常采用RDD重分区函数来减少分区数量,将小分区合并为大分区,从而提高集群工作效率。