hadoop balancer

balancer是当hdfs集群中一些datanodes的存储要写满了或者有空白的新节点加入集群时,用于均衡hdfs集群磁盘使用量的一个工具。这个工具作为一个应用部署在集群中,可以由集群管理员在一个live的cluster中执行。

语法:

To start:

start-balancer.sh

用默认的10%的阈值启动balancer

hfs dfs balancer -threshold 3

start-balancer.sh -threshold 3

指定3%的阈值启动balancer

To stop:

stop-balancer.sh

Threshold参数是1%~100%范围内的一个数,默认值是10%。Threshold参数为集群是否处于均衡状态设置了一个目标。

如果每一个datanode的利用率(已使用空间/节点总容量)和集群利用率(集群已使用空间/集群总容量)不超过Threshold参数值,则认为这个集群是均衡的。

Threshold参数值越小,集群会越均衡。但是以一个较小的threshold值运行balancer带到平衡时花费的时间会更长。同时,如果设置了一个较小的threshold,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。

基于这些基本点,目前Hadoop数据重分布程序实现的逻辑流程如下图所示:

<ignore_js_op>

Rebalance程序作为一个独立的进程与name node进行分开执行。

1 Rebalance Server从Name Node中获取所有的Data Node情况:每一个Data Node磁盘使用情况。

2 Rebalance Server计算哪些机器需要将数据移动,哪些机器可以接受移动的数据。并且从Name Node中获取需要移动的数据分布情况。

3 Rebalance Server计算出来可以将哪一台机器的block移动到另一台机器中去。

4,5,6 需要移动block的机器将数据移动的目的机器上去,同时删除自己机器上的block数据。

7  Rebalance Server获取到本次数据移动的执行结果,并继续执行这个过程,一直没有数据可以移动或者HDFS集群以及达到了平衡的标准为止。

1-7为一个迭代,这个工具迭代的把数据块从利用率高的datanode移到利用率低的datanode。

每次移动,一个datanode不会接受或移出少于10G的block或少于datanode总容量threshold百分比的block。每次移动不会运行超过20分钟。在每次移动结束,balancer会向namenode提交更新后的datanodes信息。

系统限制了balancer可以使用的带宽最大值,由如下参数设置:

dfs.balance.bandwidthPerSec

这个参数设置了一个数据块从一个datanode移到另一个时达到的最大速度。默认是1MB/s。该参数设置的越大,集群达到均衡的速度越快,但对应用进程带宽资源的竞争也就越大,会导致mapred应用运行缓慢。

?该参数在集群重启后生效

?该工具在一个hdfs集群中只能启动一个实例

?balancer在如下5种情况下会自动退出:

①集群已达到均衡状态;

②没有block能被移动;

③连续5次迭代移动没有任何一个block被移动;

④当与namenode交互式出现了IOException;

⑤另一个balancer在运行中。

对应5个退出信息:

* The cluster is balanced. Exiting

* No block can be moved. Exiting...

* No block has been moved for 5 iterations. Exiting...

* Received an IO exception: failure reason. Exiting...

* Another balancer is running. Exiting...

Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:

1.    在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。

2.    系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。

3.    Block在移动的过程中,不能暂用过多的资源,如网络带宽。

4.    数据重分布程序在执行的过程中,不能影响name node的正常工作。

时间: 2024-11-10 14:02:47

hadoop balancer的相关文章

hadoop balancer hbase balancer

Hadoop 均衡器 Hadoop在运行过程中,其datanode的块会越来越不平衡,不平衡的集群会导致部分datanode相对更繁忙. Hadoop的均衡器是一个守护进程.它会重新分配块,将块从忙碌的datanode移到相对空闲的datanode.同时坚持复本策略,将复本分散到不同机架,以降低数据损坏率. 集群均衡标准:每个datanode的使用率和集群的使用率非常接近,差距不超过给定的阀值. datanode使用率:该节点上已使用的空间与空间总量之间的比率: 集群的使用率:集群中已使用的空间

hadoop balancer配置

hadoop版本:2.9.2 1.带宽的设置参数: dfs.datanode.balance.bandwidthPerSec   默认值 10m 2.datanode之间数据块的传输线程大小:dfs.datanode.max.transfer.threads 默认值4096 3.修改dfs.datanode.balance.max.concurrent.moves ,指定DataNode上同时用于balance待移动block的最大线程个数,这个值默认是50 如果dfs.datanode.bal

Hadoop Balancer源码解读

前言 最近在做一些Hadoop运维的相关工作,发现了一个有趣的问题,我们公司的Hadoop集群磁盘占比数值参差不齐,高的接近80%,低的接近40%,并没有充分利用好上面的资源,但是balance的操作跑的也是正常的啊,所以打算看一下Hadoop的balance的源代码,更深层次的去了解Hadoop Balance的机制. Balancer和Distpatch 上面2个类的设计就是与Hadoop Balance操作最紧密联系的类,Balancer类负载找出<source, target>这样的起

(转)hadoop balancer(重新平衡)

借鉴:https://blog.csdn.net/mnasd/article/details/80369603?utm_source=blogxgwz2 参考文档: http://blog.csdn.net/chilianyi/article/details/50946818 https://www.cloudera.com/documentation/enterprise/5-10-x/topics/admin_hdfs_balancer.html     CDH官网文档 1.快速入门 当前存

一步一步跟我学习hadoop(3)----hadoop命令手册

上节我们学习了hadoop的eclipse插件安装和wordcount程序的运行,本篇对hadoop命令进行一个系统的了解 hadoop的命令通过HADOOP_HOME\bin\hadoop命令触发,我们可以在命令行执行 hadoop --help 来提示用户的命令输入. hadoop命令分为两大类:用户命令和管理命令,以下是hadoop命令的详细解读 本篇博客是摘自官网http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 0概

Hadoop的Shell操作

Hadoop shell命令操作,输入hadoop回车后可以发现如图所示: 常用的命令有: hadoop namenode -format 这个是启动Hadoop之前格式化文件系统时使用的命令. hadoop dfsadmin 这是Hadoop的管理命令,我们输入hadoop dfsadmin回车后可以看到详细命令如下图: hadoop dfsadmin常用的命令有: 1):hadoop dfsadmin -report 查看Hadoop的运行状态 2):hadoop dfsadmin -saf

分布式计算开源框架Hadoop入门实践(二)

其实参看Hadoop官方文档已经能够很容易配置分布式框架运行环境了,不过这里既然写了就再多写一点,同时有一些细节需要注意的也说明一下,其实也就是这些细节会让人摸索半天.Hadoop可以单机跑,也可以配置集群跑,单机跑就不需要多说了,只需要按照Demo的运行说明直接执行命令即可.这里主要重点说一下集群配置运行的过程. 环境 7台普通的机器,操作系统都是Linux.内存和CPU就不说了,反正Hadoop一大特点就是机器在多不在精.JDK必须是1.5以上的,这个切记.7台机器的机器名务必不同,后续会谈

Hadoop运维手记

1.处理hadoop的namenode宕机 处理措施:进入hadoop的bin目录,重启namenode服务 操作命令:cd path/to/hadoop/bin ./hadoop-daemon.sh start namenode2.处理hadoop的jobtacker宕机 处理措施:进入hadoop的bin目录,重启jobtacker服务 操作命令:cd path/to/hadoop/bin ./hadoop-daemon.sh start jobtracker3. 处理hadoop的data

Hadoop学习笔记(3)——分布式环境搭建

Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里,我们采用这样的策略来模拟环境,我们使用3台ubuntu机器,1台为作主机(master),另外2台作为从机(slaver).同时,这台主机,我们就用第一章中搭建好的环境来. 我们采用与第一章中相似的步骤来操作: 运行环境搭建 在前面,我们知道,运行hadoop是在linux上运行的.所以我们单机就在