目录
第八章 数据调优及其原理11/15
8.1 小问题问题
小文件过多会占用大量内存,且在初始化时会占用大量计算资源,严重影响性能。对于已经存在的小文件,建议把小文件进行归档;重建表,建表的时候减少reduce数量;通过参数调节,设置map/reduce端的相关参数,在文件生产中,减少reduce的数量,少用动态分区。
8.1.1 小文件的危害
-
对于HDFS来说,文件越多的时候,读写文件的时候由于要和namenode进行通信,在namenode压力大且文件过多的时候,会极大的消耗时间;从namenode元数据存储角度,文件数量越多,namenode存储的元数据就越大。
-
对于下游流程,不论是MR,Hive,Spark,在划分分片的时候,都需要从namenode获取文件信息。这个过程与文件数量成正比,同时受namenode压力的影响,在namenode压力大,上游文件多的情况下,下游的getSplit操作就会比较慢。
8.1.2 小文件的产生原理
如何定义小文件呢?有些公司的标准是:当天生产的数据中,平均文件大小低于1M且文件总数超过1000的表数量。
治理思路:
-
阶段1:map合并,发生在split操作,可以解决输入小文件的合并(也可以解决只有map阶段的输出小文件合并),方式是把多个小文件合并成一个数据分片(split),进而交给一个map task进行计算。
-
阶段2:reduce合并,发生在