一、操作系统调优
1、提高网络连接上限。以增加网络带宽的利用率,即修改内核net.core.somaxcon参数
2、关闭swap交换分区。以免内存不足时,数据会溢写到磁盘,读取时再从磁盘读取,增加数据读取时间
3、调整预读缓存区的大小。将数据预读,减少磁盘IO时间
二、HDFS调优
1、配置文件一:core-site.xml
1>hadoop.tmp.dir:手动指定临时目录,针对多磁盘的集群环境特别有效,能够让每个块利用本磁盘的临时目录
2>fs.trash-interval:设置垃圾回收站清空的时间间隔,对用户误删文件特别有用
3>io.file.buffer.size:SequenceFiles读写的缓冲大小,可减少IO次数。大型的分布式系统中可以设置为65536-65535*2
2、配置文件二:hdfs-site.xml
1>dfs.blocksize:合理的改变HDFS上的数据块的大小,根据自己的业务系统,能够提高效率,对map的个数很有效
2>dfs.namenode.handler.count:设置namenode上namenode server threads的数量,来与其它DN进行RPC通信。过多过少都不好
三、MR参数调优
配置点
1、心跳配置
2、磁盘块配置
3、槽位数目配置
4、设置RPC和线程数目
5、开启批量任务调度
具体的参数(列举)
1>mapreduce.io.sort.mb 每个Map task所占缓冲区大小
2>mapreduce.map.output.compress map的输出结果是否 压缩,有利有弊,权衡选取
3>mapreduce.job.reduces 启动的reduce的个数,可有效避免数据倾斜,防止大量数据集结于一个reduce,也可以在MR程序中进行设置
四、应用系统调优
1、避免排序:不需要排序的应用,如某些应用只是简单的联接,就不需要排序了
2、shuffle阶段内部优化
1>使用Netty代替Jetty,更快的IO框架来读取数据
2>reduce端,批量赋值
五、总结
1、常用combiner来减少输入到reduce的数据,防止数据倾斜
2、在数据通过远程到达reduce端进行处理的时候,可以合理的设置归并排序的次数,过多过少都不好,过多可能会写入磁盘,过少可能会增加归并排序数量
3、设置reduce的个数,来均衡原来输入到一个reduce上的数据,防止数据倾斜