hdfs datanode节点间balance

Posted 咖啡F

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdfs datanode节点间balance相关的知识,希望对你有一定的参考价值。

关于节点间balance,用hdfs用户执行

#!/bin/bash

File_Path=$(cd "$(dirname "$0")";pwd)
Balance_Time=`date +%Y-%m-%d-%H`
Balance_Threshold=5  ##节点间差值
BalancerBandwidth=500000000  ##500M

kinit -kt /etc/hadoop/hdfs.keytab hdfs/`hostname -f` -r 7d
hdfs dfsadmin -setBalancerBandwidth  $BalancerBandwidth
hdfs balancer -threshold $Balance_Threshold > $File_Path/datanode_balancer.log_$Balance_Time 2>&1

执行./hdfs_datanode_balance.sh &

参考资料
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#balancer

HDFS Balancer流程(上)



HDFS Balancer
HDFSBalancer,是为了实现HDFS的负载调整而存在的。它与NameNode节点进行通信,获取各个DataNode节点的负载状况,从而调整DataNode上的块分布。主要的调整其实就是一个操作,将一个数据块从一个服务器搬迁到另一个服务器上,以期各DataNode的使用率趋于平衡。


HDFS Balancer流程(上)


1
HDFS Balancer使用场景

Balancer使用场景如下:


  • 异构机器:机器的磁盘容量不一样,可能存在部分DataNode磁盘使用较高,而部分较低的情况;


  • 新增机器:新增DataNode机器后,只有新写的数据可能到新的机器中,老数据不会自动迁移,从而造成DataNode数据不平衡;


  • 固定的DataNode节点上传数据:HDFS上传策略中,如果上传的客户端机器与DataNode合设,则默认的第一个备份会放在本机上,造成DataNode存储不平衡。


2
HDFS Balancer使用方法

使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。命令如下:


start-balancer.sh -threshold 10.0 //其中,threshold取值为[1.0,100.0]


运行之后,会有Balancer进程出现:


HDFS Balancer流程(上)


上述命令设置了Threshold为10.0%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值+Threshold,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。Threshold的值为1.0到100.0之间,不显示的进行参数设置的话,默认是10.0。


范围超出之后,会有异常抛出。


如果参数值设置的越小,花费的时间就越长。使用此命令时,会反复的从磁盘使用率高的节点上,把块转移到磁盘使用率低的磁盘上。


3
HDFS Balancer配置项

HDFS Balancer相关的配置项均位于hdfs-site.xml中,可以在manager界面上进行配置修改,如下图:




网络带宽

在做均衡的时候,会对网络带宽有影响,可在下面的配置项中对各DN均衡操作的带宽做限制,ZDH版本的缺省值为100M/s, 参数重启时生效。


<property>

<name>dfs.datanode.balance.bandwidthPerSec</name>

<value>104857600</value>

<description>

Specifies the maximum amount of bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.

</description>

</property>


并行度

在做均衡的时候,每个DataNode移动块的最大并行数目,缺省的值为5,修改后重启balance即可生效。


<property>

<name>dfs.balancer.concurrent.moves.num</name>

<value>5</value>

<description>

Specifies the maximum number of blocks that each datanode can move in parallel for the balancing purpose.

</description>

</property>





精华



【1】重磅|侯为贵参加李克强总理经济座谈会 中兴互联网+助力简政放权

【2】中兴发布工程师群像大数据调研报告

【3】大数据,让股市从此没有秘密

【4】“一带一路”急先锋,中兴大数据领跑首届亚非智慧城市峰会

【5】中兴通讯助力中信银行金融大数据建设

【6】中兴大数据惊艳亮相德国CeBIT

【7】【重磅大礼】MWC大会中兴通讯主题发言原稿

【8】过年不谈技术 | 为全天下通信人点赞!

【9】中兴智慧城市UOC平台——将科幻变成现实的魔法师

【10】中兴通讯“环宁护城河”大数据产品为青奥会保驾护航






以上是关于hdfs datanode节点间balance的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之_04_Hadoop学习_02_HDFS_DataNode(面试开发重点)+HDFS 2.X新特性

HDFS balancer详解

hdfs --daemon start datanode指令介绍

无法在 HDFS“datanode”中写入数据 - 已在排除列表中添加节点

HDFS写流程

格式化hdfs后,hadoop集群启动hdfs,namenode启动成功,datanode未启动