云计算旨在通过 Internet 提供随需应变的资源或服务,通常视数据中心的规模和可靠性水平而定。MapReduce 是一个为并行处理大量数据而设计的编程模型,它将工作划分为一个独立任务组成的集合。它是一种并行编程,由某种功能随需应变的云(如 Google 的 BigTable、Hadoop 和Sector)提供支持。

在本文中,将使用遵从 Randomized Hydrodynamic Load Balancing 技术(下文将详细介绍)的负载平衡算法。利用虚拟化来降低成本和物理服务器的实际数目;更重要的是,将使用虚拟化用来实现高效的物理计算机 CPU 利用。

要从本文获取最多的知识,您应该大致了解云计算的概念、Randomized Hydrodynamic Load Balancing 技术和 Hadoop MapReduce 编程模型。最好对并行程序设计有一个基本的了解,了解 Java™ 或其他面向对象的语言的编程知识将很有帮助。

在本文中,要实现 MapReduce 算法,系统应装有以下软件:

1. Hadoop 0.20.1.

2. Eclipse IDE 3.0 以上(或 Rational Application Developer 7.1)。

3. Ubuntu 8.2 以上。

深入 MapReduce 算法之前,我们将建立基本的云架构、负载平衡、MapReduce 和并行编程 — 至少对本文这是足够了。

云架构:基本内容

图 1 显示了完整的系统详图,包括平台、软件,以及如何使用它们来实现本文的目标设置。

图 1. 云架构

您可以看到,我们使用 Ubuntu 9.04 和 8.2 作为操作系统;平台是 Hadoop 0.20.1、Eclipse 3.3.1 和 Sun Java 6;编程语言使用 Java;脚本语言使用 HTML、JSP 和 XML。

该云架构有一个主节点和一些从属节点。在该实现中,维护主服务器,获取客户端请求并根据请求的类型进行处理。

从图 2 中可以看到,搜索请求转发到 Hadoop NameNode。然后,Hadoop NameNode 负责搜索和索引操作,它将启动大量 Map 和 Reduce 进程。完成特定的搜索关键字 MapReduce 操作之后,NameNode 将输出值返回到服务器并交付客户端。

图 2. Map 和 Reduce 函数执行搜索和索引

如果请求的是特定的软件,则将基于客户租户 ID、支付会费、使用该特定软件的资格以及软件的租赁期完成验证步骤。然后,服务器为该请求提供服务,并允许用户使用特定的软件组合。

在这里提供 SaaS 的多租户功能,单个软件实例可以服务于多个租户。这样,相同的软件映像集合会基于租户 ID 生成不同的实例生成。

这些服务意味着,客户端将使用 Hadoop、Eclipse 等平台以及在搜索文件或使用某些软件时使用的操作系统。此外,为了存储其数据(数据库或文件),在云中,客户端将不得不占用一些数据中心(IaaS)的内存空间。所有这些对终端用户都是透明的。

Randomized Hydrodynamic Load Balancing:基本内容

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

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

1.迭代的方法通过几个迭代步骤确定最终目标节点。

2.直接方法在一个步骤中选择最终目标节点。

本文使用 Randomized Hydrodynamic Load Balancing 方法,这是一种同时利用了直接和迭代方法的混合方法。

MapReduce:基本内容

MapReduce 程序用于以并行方式计算大量数据。这就需要在很多计算机之间分配工作负荷。Hadoop 提供了一种系统的方法来实现这种程序设计范式。

计算需要输入一组键/值对,生成一组输出键/值对。计算涉及的两个基本操作:Map 和 Reduce。

用户编写的 Map 操作需要输入并生成一组中间键/值对。MapReduce 库将所有与同一中间键 #1 相关联的中间值组合到一起,并且将它们传递给 Reduce 功能。

同样是用户编写的 Reduce 函数接受一个中间键 #1 和该键的一组值。它将这些值合并形成可能较小的一组值。通常每次 Reduce 调用只生成一个输出值 0 或 1。中间值通过迭代器(一种可以让程序员遍历所有集合元素的对象,忽略其具体的实现)提供给用户的 Reduce 函数。这样,您就可以处理太大而无法放入内存的值列表。

以 WordCount 问题为例。即计算大文件集中的每个单词的匹配次数。Mapper 和 Reducer 函数如代码清单 1 所示。

清单 1. 解决 WordCount 问题的 Map 和 Reduce

  mapper (filename, file-contents):

for each word in file-contents:

emit (word, 1)

reducer (word, values):

sum = 0

for each value in values:

sum = sum + value

emit (word, sum)

Map 函数发出每个单词附有一个相关的出现次数计数。Reduce 函数对发出的特定单词计数求和。这个基本的功能如果构建在集群之上,就可以很容易转变为高速并行处理系统。

对之前完成的大量数据执行计算,这些数据通常在分布式环境中。Hadoop 的独特之处在于它简单的编程模式 — 使用户可以快速编写和测试分布式系统 — 以及它的高效、自动分配数据和跨计算机处理,进而能够利用 CPU 内核的底层并行度。

让我们理清思路。前文已经讨论过,Hadoop 集群中有以下节点:

1.NameNode(云主节点)。

2.DataNodes(从属节点)。

集群中的节点已经预先加载了本地输入文件。启动 MapReduce 进程时,NameNode 将使用 JobTracker 进程分配任务,它必须由 DataNodes 通过 TaskTracker 进程完成。每个 DataNode 中将运行几个 Map 进程,中间结果会提供给合器进程,生成一台计算机上文件的单词计数(在 WordCount 的问题中)。值被打乱发送到 Reduce 进程,然后生成目标问题的最终输出。

如何使用负载平衡

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

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

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

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

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

1. 首选,它获取邻近节点详细信息:

1. 当 DataNode 的负载增加到阈值级别时,它将向该 NameNode 发送一个请求。

2. NameNode 获得特定 DataNode 最邻近节点的负载级别信息。

3. NameNode 比较负载,然后将有关最空闲相邻节点的详细信息发送到特定的 DataNode。

2. 接下来,DataNodes 开始工作:

1. 每个 DataNode 将自己负载量与其最近节点的负载量之和进行比较。

2. 如果 DataNode 的负载级别大于其邻近节点,将随机选择那么负载目标节点(直接相邻的节点及其他节点) 。

3. 然后将节点请求发送到目标节点。

3. 最后,接收请求:

1. 每个节点将维护一个缓冲区接收负载请求。

2. 消息传递接口(MPI)管理此缓冲区。

3. 主线程会侦听缓冲队列,并服务其接收的请求。

4. 节点进入负载平衡执行阶段。

评估性能

提供了不同的输入文件集,每个文件集的大小不同,并在单节点和双节点集群中执行 MapReduce 任务。测量相应的执行时间,我们可以得出结论,到目前为止,在集群中运行 MapReduce 是处理大量输入文件更有效的方式。

图 3 中的关系图说明了我们在各个节点上运行的性能结果。

图 3. MapReduce 负载平衡在集群中更加有效

结束语

我们的 Hadoop MapReduce 和负载平衡的实验可以得到两个必然结论:

1.在云环境中,MapReduce 结构提高了大型数据集的吞吐效率。相反,您在非云系统中不一定能看到如此的吞吐量增加。

2.数据集较小时,MapReduce 和负载平衡不会对云系统吞吐量的增加产生明显影响。

因此,在计划在云系统上处理大量数据时,考虑 MapReduce 样式并行处理和负载平衡的组合。

在云中使用 MapReduce 和负载平衡相关推荐

  1. windows网络负载平衡

    网络负载平衡的优点 1.网络负载平衡允许你将传入的请求传播到多台服务器上,即可以使用多台服务器共同分担对外的网络请求服务.网络负载平衡技术保证即使是在负载很重的情况下它们也能作出快速响应. 2.网络负 ...

  2. [译]NGINX 和 ZooKeeper,动态负载平衡和部署(上)

    [译]NGINX 和 ZooKeeper,动态负载平衡和部署(上) Aidan Carson · 2016-07-22 11:38 原文:NGINX and ZooKeeper, Dynamic Lo ...

  3. 洛谷P4016 负载平衡问题

    洛谷P4016 负载平衡问题 题目大意: G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只 能在相邻的仓库之间 ...

  4. (译)如何用命令行在windows Azure上安装负载平衡的web Farm虚拟机(linux或其他)...

    我一哥们考虑把他的一些基于linux的网站移到Azure上.如果你现在的网站是node.js, ASP,ASP.NET,或PHP做的,使用Azure web站点是最容易的.我会在这篇文章里向你展示如何 ...

  5. 巧用Win2003负载平衡服务实现LCS2005企业版的部署:LCS2005系列之五

    巧用Win2003负载平衡解决LCS2005企业版部署 在前面的博文中我们介绍了一些LCS2005标准版的部署和使用,今天我们来实现LCS2005企业版的部署.LCS企业版比标准版复杂得多,由于LCS ...

  6. [codevs 1916] 负载平衡问题

    http://codevs.cn/problem/1916/ 题解: 我的思考过程: 样例: 5 17 9 14 16 4 负载平衡问题是一类问题,大意就像题目说的那样,是个很有用的网络流模型.< ...

  7. 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)

    24.副本同步与高可用功能验证 24.1.分布式表与集群配置 24.2.数据副本与复制表 24.3.ZooKeeper整合 24.4.创建复制表 24.5.副本同步机制 24.6.数据原子写入与去重 ...

  8. Windows Server 2008 R2 负载平衡入门篇

    一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率. 在 ...

  9. [引]Windows Server 2003 : 网络负载平衡

    本文来源于如下位置: 安装了Microsoft Windows Server 2003 Enterprise Edition 操作系统的电脑 开始菜单->所有程序->网络负载平衡管理器-& ...

最新文章

  1. java 实现 DES加密 解密算法
  2. sublime text 自动保存
  3. 汇编语言学习笔记-按指定的字体输出文本
  4. java 兔子生仔问题
  5. Spring的国际化(转载)
  6. 最全面超大规模数据集下载链接汇总(转)
  7. c语言指针的作用 举例,c语言指针详解(c语言指针用法举例)
  8. 3DMAX解决Vray渲染材质溢色问题的三种方法
  9. 企业微信 java_java企业微信开发之通讯同步
  10. TextView scrollbars setting
  11. 多天线技术(MIMO)基础
  12. PostgreSQL下载与安装
  13. 遥感影像处理2——目视解译
  14. 2019年“网红”芯片大盘点,哪一颗让你印象最深刻?
  15. ZYNQ有两个CPU?(二)——OCM共享内存
  16. Ubuntu 16.04 + cuda-8.0 + cudnn-6.0 + Tensorflow1.4和Caffe(极其简单)
  17. Facade模式新解
  18. php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例
  19. [原创]自定义ViewPager实现3D画廊效果
  20. 2018山东春季高考计算机真题,2018年春季高考数学真题.doc

热门文章

  1. JDBC预状态通道设置时间格式的问题
  2. 计算机组成实验六MIPS汇编器,杭电计组实验6-MIPS汇编器与模拟器实验.doc
  3. c语言邻接表的构建_C++实现有向图邻接表的构建
  4. 数学之路(2)-数据分析-R基础(5)
  5. 系统架构师笔记(1)
  6. rust(31)-枚举体
  7. 【学术相关】中国霸榜AI顶会,但引用量最低!最新斯坦福AI指数出炉!
  8. 【Python】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表
  9. 推荐特征筛选偷懒神器-M3USelector
  10. 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!