HDFS小文件影响:

  - 文件元数据存储在Namenode内存中,大量的小文件就有大量的文件元数据

  - 影响计算引擎的任务数量,每个小文件生成一个Map任务

 

1. 数据输入小文件处理:

  - 合并小文件,对小文件进行Har归档;自定义Inputformat将小文件存储成SequenceFile文件

  - 采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景

  -对于大量的小文件任务,开启JVM重用;将 mapred.job.reuse.jvm.num.tasks 设置成大于1的数,

    归属同一job的顺序执行的task可以共享一个JVM

 

2. Map阶段:

  - 增大环形缓冲区大小,默认100M,根据实际情况扩大

  - 增大环形缓冲区溢写比例,默认为80%,根据实际情况扩大

  - 减少对溢写文件的合并(merge)次数

  - 不影响实际业务的前提下,采用 Combiner提前合并,减少IO,(求平均值这种情况不能用,即不影响业务)

  - MapTask 增大内存大小、CPU核数

 

3. Reduce阶段:

  - 合理设置Map和Reduce个数

  - 设置Map、Reduce共存,调整 slowstart.completedmaps 参数,使Map运行后,Reduce开始运行,减少Reduce等待时间

  - 尽量少使用Reduce,因为Reduce连接数据集时回产生大量的网络消耗

  - 增加每个Reduce去Map中拿数据的并行数

  - 适当增大Reduce端的存储数据内存大小

  - 增加ReduceTask的内存大小、CPU核数

 

4. IO :

  - 采用数据压缩的方式,减少网络IO的时间  (snappy & LZOP 安装)

  - 使用SequenceFile二进制文件

 

版权声明:本文为joey-413原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/joey-413/p/14111416.html