hdfs平衡分布

这篇文章是从网上看到的,觉得很好就收藏了,但是最终不知道出处了。

Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。

在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下:

sh $HADOOP_HOME/bin/start-balancer.sh –t 10%

这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。

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

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

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

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

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

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

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集群以及达到了平衡的标准为止。

Hadoop现有的这种Balancer程序工作的方式在绝大多数情况中都是非常适合的。

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

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集群的情况。

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

1 继续使用现有的Balancer程序,但是修改rack中的机器分布。将磁盘空间小的机器分叉到不同的rack中去。

2 修改Balancer程序,允许改变每一个rack中所具备的block数量,将磁盘空间告急的rack中存放的block数量减少,或者将其移动到其他磁盘空间富余的rack中去。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

容器化RDS|调度策略

前文我们介绍了基于 Kubernetes 实现的下一代私有 RDS. 其中, 调度策略是具体实现时至关重要的一环, 它关系到 RDS 集群的服务质量和部署密度....

38610
来自专栏北京马哥教育

基础拾遗--【转】网站带宽计算

我们通常说的网站流量(traffic)就是指网站的访问量,是用来描述访问一个网站的用户数量以及用户所浏览的网页数量等指标,常用的统计指标包括网站的独立用户数量、...

4157
来自专栏PaddlePaddle

【PaddlePaddle】Windows版快速安装包正式上线!

正在钻研深度学习,学习PaddlePaddle,或者是正在用Windods系统的小伙伴们,再也不用特意装Linux系统,借助快速安装包就可以下载PaddlePa...

1344
来自专栏坚毅的PHP

zookeeper学习系列:四、Paxos算法和zookeeper的关系

一、问题起源 淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html  提到Paxos是...

4234
来自专栏苦逼的码农

5分钟读懂拥塞控制

大家可能都听说过拥塞控制和流量控制,想必也有一些人可能还分不清拥塞控制和流量控制,进而把他们当作一回事。拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网络...

1081
来自专栏恰童鞋骚年

操作系统核心原理-3.进程原理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态。那么问题来...

1085
来自专栏MixLab科技+设计实验室

DIY一个以图搜图引擎1

大家好,凡关注本公众号的用户都可参与到这个小实验中来,基于微信头像的数据,我发现这几个有趣的事情(注意保密,以下都只显示头像,我也只能取到头像和昵称的数据,其他...

3747
来自专栏星流全栈

React + Redux 最佳实践

3035
来自专栏祝威廉

Spark 1.6 内存管理模型( Unified Memory Management)分析

新的内存模型是在这个Jira提出的,JIRA-10000,对应的设计文档在这:unified-memory-management。

1303
来自专栏AI科技大本营的专栏

全文来了!打败DBA老炮,机器学习如何改变数据库管理系统

作者 | Dana Van Aken、Andy Pavlo、Geoff Gordon 编译 | AI100 数据库管理系统(DBMSs)是所有数据密集型应用的...

37912

扫码关注云+社区

领取腾讯云代金券