`

hadoop优化0

 
阅读更多

 

 

1 map端优化:

 

1.1 shuffle过程中:

数据从mapper端传递到reducer端的过程,  网络传输 磁盘读写操作  这是最耗费时间的.

此时,可以进行数据压缩,参考链接:hadoop压缩

1.2 map端的数据排序是发生在内存中,如果map缓冲区越大,那么写出到磁盘的次数就越少。

      map端将内存中的数据spill到磁盘的时候,如果磁盘的是固态硬盘,那么存储的速度会更快

 

1.3 如果map到reduce中,网络是千兆的自然也会比百兆的网速拷贝速度快.


1.4 map job调优:

推测执行: 如果某个任务执行过慢,会对同一份数据产生多个mapper任务,同时执行,谁先执行完了就用谁的东西, 这就是推测执行,在集群中需要关闭。
但是关闭后,如果这个任务执行失败了,那么还会重新启动这个任务,但是从概率上讲,很少发生。
 mapred.map.task.speculative.execution=true;  
 mapred.reduce.task.speculative.execution=false ;

开启jvm重用: 每个mappre任务启动单独进程,JVM重用就用一个JVM数据都放在这一个里面,开启后避免了不断新建Java进程,坏处进程死掉则后面无法执行,如果数据存在属性变量会出现
             环境污染,谨慎开启吧
      mapred.job.reuse.jvm.num.tasks=-1 
增加InputSplit大小:  InputSplit.size由三个要素决定: min  max  blocksize
      mapred.min.split.size=268435456
增大map输出的缓存: 意味着向磁盘输出map数量次数减少。
      io.sort.mb=300
增加合并spill文件数量: 目的还是减少写入磁盘的次数
      io.sort.factor=50
map端输出压缩,推荐LZO压缩算法
      mapred.compress.map.output=true; 
      mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec;
增大shuffle复制线程数: 加快拷贝速度
      mapred.reduce.parallel.copies=15
设置单个节点的map和reduce执行数量(默认每个都是2) 前提是机器配置别太差,内存 硬盘都要足 ----> 看数据资源中心测试环境的配置
      mapred.tasktracker.map.tasks.maxinum=2
      mapred.tasktracker.reduce.tasks.maxinum=2  

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics