Hadopp-balance数据平衡

Rebalance Server计算哪些机器需要将数据移动,哪些机器可以接受移动的数据。并且从Name Node中获取需要移动的数据分布情况。
计算规则是什么? 这块代码在哪里?

切换到hdfs用户

1
su - hdfs

打印hdfs状态信息,会得到磁盘使用状态

1
hdfs dfsadmin -report

balancer 使用帮助

1
2
3
4
5
6
hdfs  balancer  -help
-threshold 10 \\集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100
-policy datanode \\默认为datanode,datanode级别的平衡策略
-exclude -f /tmp/ip1.txt \\默认为空,指定该部分ip不参与balance, -f:指定输入为文件
-include -f /tmp/ip2.txt \\默认为空,只允许该部分ip参与balance,-f:指定输入为文件
-idleiterations 5 \\迭代次数,默认为 5

datanode之间数据迁移的带宽设置,可以在平台上修改,需要重启集群

1
2
3
4
5
6
7
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>6250000</value>
</property>
<备注:6250000 / (1024 * 1024) = 6M/s>
或者设置临时带宽:
# hdfs dfsadmin -setBalancerBandwidth 6250000

动态增大带宽(不需重启,需要切换到hdfs用户,不可设置太大,会占用mapreduce任务的带宽):

1
hdfs dfsadmin -fs hdfs://${active-namenode-hostname}:8020 -setBalancerBandwidth 104857600

balance脚本在满足以下任何一个条件都会自动退出:

1
2
3
4
5
* The cluster is balanced;
* No block can be moved;
* No block has been moved for specified consecutive iterations (5 by default);
* An IOException occurs while communicating with the namenode;
* Another balancer is running.

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

1
2
3
4
1.在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。
2.系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。
3.Block在移动的过程中,不能占用过多的资源,如网络带宽。
4.数据重分布程序在执行的过程中,不能影响name node的正常工作。

手动执行balancer命令

1
hdfs balancer -threshold 10   #10为各节点存储的浮动比例10%上下浮动

Hadoop Balancer的步骤:

1
2
3
4
1、balancer服务,从namenode获取datanode磁盘的使用情况
2、balancer服务,计算需要把哪些数据移动到哪些节点
3、需要移动block的机器将数据移动的目的机器上去,同时删除自己机器上的block副本数据。
4、balancer服务,获取到本次数据移动的执行结果,并继续执行这个过程,一直没有数据可以移动或者HDFS集群以及达到了平衡的标准为止。

可能存在的问题:

现在我们设想这样一种情况:

  1. 数据是3份备份。
  2. HDFS由2个rack组成。
  3. 2个rack中的机器磁盘配置不同,第一个rack中每一台机器的磁盘空间为1TB,第二个rack中每一台机器的磁盘空间为10TB。
  4. 现在大多数数据的2份备份都存储在第一个rack中。
    在这样的一种情况下,HDFS级群中的数据肯定是不平衡的。现在我们运行Balancer程序,但是会发现运行结束以后,整个HDFS集群中的数据依旧不平衡:rack1中的磁盘剩余空间远远小于rack2。

这是因为Balance程序的开发原则1导致的。
简单的说,就是在执行Balancer程序的时候,不会将数据中一个rack移动到另一个rack中,所以就导致了Balancer程序永远无法平衡HDFS集群的情况。

针对于这种情况,可以采取的方案:

  1. 继续使用现有的Balancer程序,但是修改rack中的机器分布。将磁盘空间小的机器分叉到不同的rack中去。
  2. 修改Balancer程序,允许改变每一个rack中所具备的block数量,将磁盘空间告急的rack中存放的block数量减少,或者将其移动到其他磁盘空间富余的rack中去。

另外一种方法:
–可能存在风险

可以让某个hdfs空间最满的节点先做下线处理,做下decommission,格式化现有的数据盘,然后再重新加入到节点中来,这也是个方法,让hdfs缺失的一份数据平均分配到其他节点上,速度会比较快,

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信