预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Hadoop云计算技术手册 作者:zbwd中国云计算论坛 Email:xjtuzb@ieee.org GTCRC@XJTU 序言 Hadoop是一个开源的分布式并行计算平台,它主要由MapReduce的算法执行和 一个分布式的文件系统等两部分组成。 Hadoop起源于DougCutting大牛领导开发的Nutch搜索引擎项目的子项目。现 在是Apache软件基金会管理的开源项目。 本文主要介绍Hadoop及相关技术,从Hadoop的起源开始讲述,主要涵盖了 MapReduce算法思想,基本框架,运行流程和编程粒度等内容,以期给入门者提 供一个关于Hadoop的技术简介和研究参考。关于Hadoop的安装指南和编程范例 并不在本文叙述范围内,有需要者请参考其它资料。 因笔者水平实在太有限了,文中如有疏漏错误请不吝指出,万分感谢。 本人资料多数来源于互联网的技术文档,附录列出引文列表,特此致谢原文作者。 最后,发自内心、无与伦比地感谢Google、Apache软件基金会和DougCutting 带给我们如此简约、优雅的技术。 OK,让我们开始吧!去寻找那神奇的小飞象。 Hadoop云计算技术介绍 目录 引言——Hadoop从何而来 算法思想——Hadoop是怎么思考的 基本架构——Hadoop是如何构成的 运行流程——Hadoop是如何工作的 任务粒度——Hadoop是如何并行的 参考文献 Hadoop云计算技术介绍 1.引言——Hadoop从何而来 自从Google工程师JeffreyDean提出MapReduce编程思想,MapReduce便在 Google的各种Web应用中释放着魔力。然而,也许出于技术保密的目的,Google 公司并没有透露其MapReduce的实现细节。 幸运的是,DougCutting开发的Hadoop作为MapReduce开源实现,让 MapReduce这么平易近人地走到了我们面前。2006年1月,DougCutting因其 在开源项目Nutch和Lucene的卓越表现受邀加入Yahoo公司,专职在Hadoop项 目上进行开发。现在,DougCutting大牛已经加盟Cloudera(一家从事Hadoop 产品商业化及技术支持的公司)。 注:Hadoop名称的来历——Hadoop原本是小DougCutting的大象玩具。 作为GoogleMapReduce技术的开源实现,Hadoop理所当然地借鉴了Google 的GoogleFileSystem文件系统、MapReduce并行算法以及BigTable。因此, Hadoop也是一个能够分布式处理大规模海量数据的软件框架,这一点不足为奇。 当然,这一切都是在可靠、高效、可扩展的基础上。Hadoop的可靠性——因为 Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现 故障时可以对失败的节点重新分布处理。Hadoop的高效性——在MapReduce Hadoop云计算技术介绍 的思想下,Hadoop是并行工作的,以加快任务处理速度。Hadoop的可扩展—— 依赖于部署Hadoop软件框架计算集群的规模,Hadoop的运算是可扩展的,具有 处理PB级数据的能力。 虽然Hadoop自身由Java语言开发,但它除了使用Java语言进行编程外,同样支持 多种编程语言,如C++。 Hadoop的长期目标是提供世界级的分布式计算工具,也是对下一代业务(如搜索 结果分析等)提供支持的Web扩展(web-scale)服务。 2.算法思想——Hadoop是怎么思考的 MapReduce主要反映了映射和规约两个概念,分别完成映射操作和规约操作。映 射操作按照需求操作独立元素组里面的每个元素,这个操作是独立的,然后新建 一个元素组保存刚生成的中间结果。因为元素组之间是独立的,所以映射操作基 本上是高度并行的。规约操作对一个元素组的元素进行合适的归并。虽然有可能 规约操作不如映射操作并行度那么高,但是求得一个简单答案,大规模的运行仍 然可能相对独立,所以规约操作也有高度并行的可能。 Hadoop云计算技术介绍 图1 MapReduce把数据集的大规模操作分配到网络互联的若干节点上进行,以实现其 可靠性;每个节点都会向主节点发送心跳信息,周期性地把执行进度和状态报告 回来。假如某个节点的心跳信息停止发送,或者超过预定时隙,主节点标记该节 点为死亡状态,并把先前分配到它的数据发送到其它节点。其中,每个操作使用 命名文件的原子操作,避免并行线程之间冲突;当文件被改名时,系统可能会把 它复制到任务名以外的其它名字节点上。