Hadoop回顾--MapReduce的负载均衡

来源:互联网 发布:分销平台软件 编辑:程序博客网 时间:2024/06/05 18:53

接触了近一年的Hadoop,对MapReduce的工作流程,容错机制都有了一些浅显的理解。自己也写过一些加载文件和排序的MapReduce,但一直处于学习阶段,对MapReduce在集群上的应用理解还是太浅,在这说说我对MapReduce负载均衡的认识。


一、Randomized Hydrodynamic Load Balancing:基本内容

负载平衡用来确保在使用其他资源时您现有的资源都不是空闲的。若要平衡负载分布,可以将负载从源节点(有多余工作负载)的迁移到相对较轻的负载目标节点

在运行时应用负载平衡时,它被称之为动态负载平衡— 这可以根据执行节点选择直接实现或以迭代的方式实现:

  • 迭代的方法通过几个迭代步骤确定最终目标节点。
  • 直接方法在一个步骤中选择最终目标节点。

二、如何使用负载平衡

负载平衡有助于在某个节点的负载超出阈值水平时,将负载平均地分散到空闲的节点。虽然在执行 MapReduce 算法时负载平衡不够明显,但在进行大文件处理以及硬件资源利用至关重要的时候它是非常必要的。一个显著的作用是可以在资源紧张的情况下增加硬件利用率,提高性能。

在某些数据节点已满或者新的空节点加入集群时,实现一个模块来平衡 Hadoop 分布式文件系统集群上的磁盘空间使用情况。达到阈值时将启动平衡器(Class Balancer 工具);此参数是一个从 0 至 100% 的分数,默认值为 10%。此选项为是否平衡集群设置目标;阈值越小,集群越平衡,同样,平衡器运行的时间也越长。(注:阈值可以很小到您不能平衡集群的状态,因为应用程序可能同时写入和删除文件)

如果对于每个数据节点,节点占用空间与总容量的比率(称为节点利用率)不同于集群已用空间与总空间的比率(集群利用率),且不超过阈值,则认为该集群是平衡的。

该模块将把利用率高的数据节点的数据块以迭代方式移动到利用率低的节点上;在每个迭代中,节点移动或接收不超过容量的阈值比例,每次迭代运行不超过 20 分钟。

在此实现中,节点被分类为高利用平均利用 和未充分利用。根据每个节点的利用额,将负载在节点之间转移以平衡集群。模块工作方式如下:

  • 首选,它获取邻近节点详细信息:
    1. 当 DataNode 的负载增加到阈值级别时,它将向该 NameNode 发送一个请求。
    2. NameNode 获得特定 DataNode 最邻近节点的负载级别信息。
    3. NameNode 比较负载,然后将有关最空闲相邻节点的详细信息发送到特定的 DataNode。
  • 接下来,DataNodes 开始工作:
    1. 每个 DataNode 将自己负载量与其最近节点的负载量之和进行比较。
    2. 如果 DataNode 的负载级别大于其邻近节点,将随机选择那么负载目标节点(直接相邻的节点及其他节点) 。
    3. 然后将节点请求发送到目标节点。
  • 最后,接收请求:
    1. 每个节点将维护一个缓冲区接收负载请求。
    2. 消息传递接口(MPI)管理此缓冲区。
    3. 主线程会侦听缓冲队列,并服务其接收的请求。
    4. 节点进入负载平衡执行阶段。

0 1