随着数据量的猛增,我们一般都会给服务器加硬盘,我们的集群也要相应的配置多个存储目录,然后还得考虑各个硬盘目录的数据存储是否均衡。
1.hadoop配置多个存储目录
hadoop的dfs.datanode.data.dir是设置datanode节点存储数据块文件的本地路径,通常可以设置多个,用逗号隔开:
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/local/dfs-data,/usr/local/hadoop/dfs-data</value>
</property>
2.hadoop多个存储目录均衡
但随着数据量的增多,有可能会导致磁盘空间不均衡。
当前hadoop写入文件有两种策略,一种是默认的轮询方式,一种是根据可用空间的大小来判断写入。
2.1按空间大小策略配置参数:
<property>
<name>dfs.datanode.fsdataset.volume.choosing.policy</name>
<value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property>
此项配置是根据磁盘的可用空间来优先写入的策略。一般需要配合一下两个参数来使用:
2.2磁盘空间大小策略-按差值配置:
配置项: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.
意思是首先计算出两个值,一个是所有磁盘中最大可用空间,另外一个值是所有磁盘中最小可用空间,如果这两个值相差小于该配置项指定的阀值时,则就用轮询方式的磁盘选择策略选择磁盘存储数据副本。
2.2磁盘空间大小策略-按比例配置:
配置项: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,如果配置太小,会导致剩余空间足够的磁盘实际上没分配足够的数据副本,而剩余空间不足的磁盘取需要存储更多的数据副本,导致磁盘数据存储不均衡。