您的位置:首页 > 运维架构

关于Hadoop HDFS数据均衡。

2016-03-03 16:38 375 查看
在hadoop集群中,当有新节点增加或者删除原有节点时,如果不启用数据均衡服务(负载均衡),则会造成数据在集群中分布不均匀。由此而带来的问题是无法有效的利用MR本地化计算的优势,通俗来说就是A节点上运行的map任务所需数据不在A节点上,在B节点上。这就避免不了跨节点进行数据读取,造成了网络带宽的不必要消耗。为了解决这样的问题,引入数据均衡机制,也就是使用该服务达到集群中数据的均匀分布的目的。但是在达到该目的的过程中,需要遵循如下原则而不至于给原有集群带来不必要的麻烦:

1.原有数据块不会减少

2.可随时终止该服务

3.数据移动不能占用过多的资源

4.不能够影响namenode的工作

均衡负载原理图:



大致过程为:

1.数据均衡服务要求namenode根据集群中datanode的数据分布做汇总。

2.根据该汇总情况形成数据块迁移路线图。

3.开始数据块迁移任务

4.迁移完成,通知namenode删除原有数据块。

实际应用中可能需要每天定时做一次数据均衡,在crontab中定时执行start-balancer.sh命令,当然还可以随时终止stop-balancer.sh.

start-balancer.sh中可使用参数 -t 如start-balancer.sh -t 5%,默认10%。该参数的意思是集群中各节点的hdfs磁盘使用率和集群中总的hdfs磁盘使用率的差值都应该小于该参数值,就达到了数据均衡,越小表明集群中的数据越均衡。在数据库迁移的过程中,还可以设置其移动的速度在hdfs-site.xml中设置(需重启hdfs服务)

<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value> =>1M/s
</property></span>


该值越大意味着数据均衡完成的速度越快,但要同时考虑到MR的任务运行不会受到影响,在实际应用中由于对文件不断的进行读写操作,可能无法达到设定的阀值。另一方尽量保持集群中各个节点的磁盘容量一致。

参考文章:http://www.ibm.com/developerworks/cn/data/library/bd-1506-hdfsdatabalance/index.html
http://www.aboutyun.com/thread-7354-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: