关于Hadoop HDFS数据均衡。

来源:互联网 发布:sql与数据库系统的关系 编辑:程序博客网 时间:2024/05/16 15:23

   在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


0 0
原创粉丝点击