【TDH运维必备技能】DataNode节点内磁盘写入策略修改

  运维必备技能, 原理
内容纲要

问题描述

单个节点内DataNode的各磁盘使用率不均匀,有些磁盘快满了有些几乎没用
例如:

189-39-235-71:~ # df -h
Filesystem  Size  Used Avail Use% Mounted on
/dev/xvda  360G  92G   250G  28% /
/dev/xvdb  700G  900G   200G  78% /srv/BigData/hadoop/data1
/dev/xvdc  700G  900G   200G  78% /srv/BigData/hadoop/data2
/dev/xvdd  700G  900G   200G  78% /srv/BigData/hadoop/data3
/dev/xvde  700G  900G   200G  78% /srv/BigData/hadoop/data4
/dev/xvdf  10G   900G   890G  2% /srv/BigData/hadoop/data5
189-39-235-71:~ #  

可能原因

1, 部分磁盘故障,更换为新盘,因此新盘使用率低。

2, 增加了磁盘个数,如原先4个数据盘,现扩容为5个盘。

注意:对于TDH 9.0 产品,hadoop 已经升级到3.X 可以利用hdfs diskbalancer 来进行磁盘间数据均衡

原因分析

DataNode节点内写block磁盘时,有2种策略“轮询”和“优先写剩余磁盘空间多的磁盘”,默认是“轮询”。

参数说明:dfs.datanode.fsdataset.volume.choosing.policy

可选值:

轮询:org.apache.hadoop.hdfs.server.datanode.fsdataset.RoundRobinVolumeChoosingPolicy
优先写剩余空间多的磁盘: org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy

解决方法

将DataNode选择磁盘策略的参数 dfs.datanode.fsdataset.volume.choosing.policy 的值改为

org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy

让DataNode根据磁盘剩余空间大小,优先选择磁盘剩余空间多的节点存储数据副本

在TDH集群中,可以通过添加3个参数设置调整为优先往空闲磁盘写数据,配置方法如下(注意格式):
a) 在hdfs页面添加下面3个自定义参数

file

b) 配置服务,并重启hdfs服务

注:关于上述3个参数的解释:

    dfs.datanode.fsdataset.volume.choosing.policy  
       --该参数配置成AvailableSpaceVolumeChoosingPolicy,DataNode在选择磁盘存储数据时,会选择可用磁盘空间最大的磁盘来存储数据,这样保证了小盘不会存储过多的数

    dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
       --该参数配置是首先计算出两个值,一个是所有磁盘中最大可用空间,另外一个值是所有磁盘中最小可用空间,如果这两个值相差小于该配置项指定的阀值时,则就用轮询方式的磁盘选择策略选择磁盘存储数据副本
    dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction
       --该参数配置是指有多少比例的数据副本应该存储到剩余空间足够多的磁盘上。该配置项取值范围是0.0-1.0,一般取0.5-1.0,如果配置太小,会导致剩余空间足够的磁盘实际上没分配足够的数据副本,而剩余空间不足的磁盘取需要存储更多的数据副本,导致磁盘数据存储不均衡
       --配置成1.0f的话会优先按照磁盘剩余空间大小,选择空余最多的磁盘,将数据全部写到该盘上面

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。