第一章 卷选择简介
在hadoop2.0中,datanode数据副本存放磁盘选择策略有两种方式:
第一种为集群默认的卷轮询方式,实现类: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
默认值是10737418240,既10G,一般使用默认值,官方解释:
This setting controls how much DN volumes are allowed to differ in terms of bytes of free disk space before they are considered imbalanced. If the free space of all the volumes are within this range of each other, the volumes will be considered balanced and block assignments will be done on a pure round robin basis.
意思是首先计算出两个值,一个是所有磁盘中最大可用空间,另外一个值是所有磁盘中最小可用空间,如果这两个值相差小于该配置项指定的阀值时,则就用轮询方式的磁盘选择策略选择磁盘存储数据副本。
- dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction
默认值是0.75f,一般使用默认值,官方解释:
This setting controls what percentage of new block allocations will be sent to volumes with more available disk space than others. This setting should be in the range 0.0 - 1.0, though in practice 0.5 - 1.0, since there should be no reason to prefer that volumes with
意思是有多少比例的数据副本应该存储到剩余空间足够多的磁盘上。该配置项取值范围是0.0-1.0,一般取0.5-1.0,如果配置太小,会导致剩余空间足够的磁盘实际上没分配足够的数据副本,而剩余空间不足的磁盘取需要存储更多的数据副本,导致磁盘数据存储不均衡。