在云中使用 MapReduce 和负载平衡
2010-08-26 00:00:00 来源:WEB开发网在某些数据节点已满或者新的空节点加入集群时,实现一个模块来平衡 Hadoop 分布式文件系统集群上的磁盘空间使用情况。达到阈值时将启动平衡器(Class Balancer 工具);此参数是一个从 0 至 100% 的分数,默认值为 10%。此选项为是否平衡集群设置目标;阈值越小,集群越平衡,同样,平衡器运行的时间也越长。(注:阈值可以很小到您不能平衡集群的状态,因为应用程序可能同时写入和删除文件)
如果对于每个数据节点,节点占用空间与总容量的比率(称为节点利用率)不同于集群已用空间与总空间的比率(集群利用率),且不超过阈值,则认为该集群是平衡的。
该模块将把利用率高的数据节点的数据块以迭代方式移动到利用率低的节点上;在每个迭代中,节点移动或接收不超过容量的阈值比例,每次迭代运行不超过 20 分钟。
在此实现中,节点被分类为高利用、平均利用 和未充分利用。根据每个节点的利用额,将负载在节点之间转移以平衡集群。模块工作方式如下:
首选,它获取邻近节点详细信息:
当 DataNode 的负载增加到阈值级别时,它将向该 NameNode 发送一个请求。
NameNode 获得特定 DataNode 最邻近节点的负载级别信息。
NameNode 比较负载,然后将有关最空闲相邻节点的详细信息发送到特定的 DataNode。
接下来,DataNodes 开始工作:
每个 DataNode 将自己负载量与其最近节点的负载量之和进行比较。
如果 DataNode 的负载级别大于其邻近节点,将随机选择那么负载目标节点(直接相邻的节点及其他节点) 。
然后将节点请求发送到目标节点。
最后,接收请求:
每个节点将维护一个缓冲区接收负载请求。
消息传递接口(MPI)管理此缓冲区。
主线程会侦听缓冲队列,并服务其接收的请求。
节点进入负载平衡执行阶段。
结束语
我们的 Hadoop MapReduce 和负载平衡的实验可以得到两个必然结论:
在云环境中,MapReduce 结构提高了大型数据集的吞吐效率。相反,您在非云系统中不一定能看到如此的吞吐量增加。
数据集较小时,MapReduce 和负载平衡不会对云系统吞吐量的增加产生明显影响。
因此,在计划在云系统上处理大量数据时,考虑 MapReduce 样式并行处理和负载平衡的组合。
更多精彩
赞助商链接