(1)Combiner优化
在之前的shuffle过程中的map端生成最终溢写文件时,例如:aaa 1, aaa 1 这样的数据会被合并为{aaa [1,1]} ,而我们可以通过给每个map显示的设定combiner,来将这个节点的输出优化,即如前面的例如,如果他们是同一节点的数据,他们会合并为{aaa,2},combiner相当于小型的reduce,不过他们这要求reduce的输入数据格式和输出数据格式一致,并且value的值是满足结合律的
(2)压缩
通过在对数据压缩,来减少网络IO,减少磁盘占用,可以用在三个地方:输入数据压缩、map输出压缩、reduce输出压缩。当然压缩也会增加CPU计算
(3)map的数量
Map task的数量使用split的数量决定的,split的数据越少,每个map task的执行时间就越短,但是相应的job的执行时间也会被拉长,因为内部调度的时间更长了。
(4)reduce的数量
可以在client设置,增加reduce的数量
(5)大量小文件的优化
Mapreduce不怕大文件,就怕小文件,默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片,不管有多少个小文件,都会是单独的切片,都会交给一个maptask,这样,如果有大量的小文件,就会产生大量的maptask,处理效率极端底下
最好的方法:在数据处理的最前端(预处理、采集),就将小文件合并成大文件,
在上传到HDFS做后续的分析,如果已经是大量的小文件在HDFS中了,可以使用另一种inputformat来做切片(CombineFileInputformat),它的切片逻辑跟FIleinputformat不同:它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask了
Mapreduce的优化策略
最新推荐文章于 2022-07-06 12:09:40 发布