1. HDFS优化
1.1 卷选择策略
卷选择策略有两种:
第一种为集群默认的卷轮询方式,实现类:RoundRobinVolumeChoosingPolicy.java
第二种为卷可用空间优先方式,实现类:AvailableSpaceVolumeChoosingPolicy.java
采用轮询卷存储方式虽然能保证每块盘都能得到使用,但是在长期运行的集群中由于数据删除和磁盘热插拔等原因,可能造成磁盘空间的不均。所以最好将磁盘选择策略配置成第二种,根据磁盘空间剩余量来选择磁盘存储数据块,这样能保证节点磁盘数据量平衡IO压力被分散。
主参数
<property>
<name>dfs.datanode.fsdataset.volume.choosing.policy</name>
<value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property>
辅助参数
dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
默认10G,磁盘存储差距阈值
dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction
默认0.75f,多大可能落到余量大的磁盘
1.2 dfs.name.dir
这个参数用于确定将HDFS文件系统的元信息保存在什么目录下。
可以将这个参数设置为多个目录,那么每个目录都保存元信息的一个备份。
1.3 dfs.data.dir
这个参数用于确定将HDFS文件系统的数据保存在什么目录下。
可以将这个参数设置为多个卷上目录,以此增加存储空间和IO吞吐率。
2. yarn优化
3. MR优化
3.1 mapred.local.dir
MapReduce临时数据存放的目录,添加多个不同卷的目录有助于提升IO吞吐率。
3.2 mapred.compress.map.output
指定map的输出是否压缩;指定压缩有助于减小IO压力,但会增加CPU成本应慎重选择。
3.2 mapred.output.compress
指定reduce的输出是否压缩;指定压缩有助于减小IO压力,但会增加CPU成本应慎重选择。
3.3 combiner使用
在map与reduce之间引入combiner,map端task处理的数据会作为combiner的输入进行一次预规约,combiner规约后的数据作为reduce的输入在进行最终规约。引入combiner能够大量减少map端传递到reduce端数据量,增加任务的处理性能,同时能够有效避免数据倾斜带来的性能影响。