标签:
HDFS均衡操作的启动
使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。命令如下:
start-balancer.sh -threshold 8
运行之后,会有Balancer进程出现:
上述命令设置了Threshold为8%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。Threshold的值为1到100之间,不显示的进行参数设置的话,默认是10。
范围超出之后,会有异常抛出:
java.lang.IllegalArgumentException: Numberout of range: threshold = 0.07
atorg.apache.hadoop.hdfs.server.balancer.Balancer$Cli.parse(Balancer.java:1535)
atorg.apache.hadoop.hdfs.server.balancer.Balancer$Cli.run(Balancer.java:1510)
atorg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
atorg.apache.hadoop.hdfs.server.balancer.Balancer.main(Balancer.java:1582)
2012-12-19 16:28:33,299 ERRORorg.apache.hadoop.hdfs.server.balancer.Balancer: Exiting balancer due anexception
java.lang.IllegalArgumentException: Numberout of range: threshold = 110.0
atorg.apache.hadoop.hdfs.server.balancer.Balancer$Cli.parse(Balancer.java:1535)
atorg.apache.hadoop.hdfs.server.balancer.Balancer$Cli.run(Balancer.java:1510)
atorg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
atorg.apache.hadoop.hdfs.server.balancer.Balancer.main(Balancer.java:1582)
如果参数值设置的越小,花费的时间就越长。使用此命令时,会反复的从磁盘使用率高的节点上,把块转移到磁盘使用率低的磁盘上,每次移动不超过10G大小,每次移动不超过20分钟。
在做均衡的时候,会对网络带宽有影响,可在配置文件中对均衡操作的带宽做限制:
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value>
<description>
Specifies themaximum bandwidth that each datanode can utilize for the balancing purpose interm of the number of bytes per second.
</description>
</property>
若不设置,则balance操作时,速度默认为1M/S大小。参数重启时生效。不允许在集群中使用多个均衡同时操作。
HDFS均衡操作的退出
除了在命令行直接使用stop-balancer.sh脚本来执行退出均衡操作之外,当发生以下几种情况时,当前执行的均衡操作也会退出:
(1)集群已经达到均衡状态;
(2)没有块可以再被移动;
(3)连续五次迭代操作时没有块移动;
(4)和NameNode通信时出现IOException;
(5)另外一个均衡操作启动;
更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
标签:
原文地址:http://my.oschina.net/crxy/blog/416755