全部博文(436)
分类:
2010-10-23 22:31:04
Hadoop 云计算技术介绍
小组成员:李俊,张文彬,胡凡,赵宇航,吴喆
通过一段时间对云计算的了解,为Hadoop研究做了一系列的铺垫,接下来我们就对Hadoop技术开始研究。
1.Hadoop 概述
作为Google MapReduce技术的开源实现,Hadoop理所当然地借鉴了Google的Google File System文件系统、MapReduce并行算法以及BigTable。因此,Hadoop也是一个能够分布式处理大规模海量数据的软件框架。当然,这一切都是在可靠、高效、可扩展的基础上。Hadoop的可靠性——因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理。Hadoop的高效性——在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。Hadoop的可扩展——依赖于部署Hadoop软件框架计算集群的规模,Hadoop的运算是可扩展的,具有处理PB级数据的能力。Hadoop的长期目标是提供世界级的分布式计算工具,也是对下一代业务(如搜索结果分析等)提供支持的Web扩展(web-scale)服务。
2.Hadoop 是怎么思考的——算法思想
MapReduce 主要反映了映射和规约两个概念,分别完成映射操作和规约操作。映射操作按照需求操作独立元素组里面的每个元素,这个操作是独立的,然后新建一个元素组保存刚生成的中间结果。因为元素组之间是独立的,所以映射操作基本上是高度并行的。规约操作对一个元素组的元素进行合适的归并。虽然有可能规约操作不如映射操作并行度那么高,但是求得一个简单答案,大规模的运行仍然可能相对独立,所以规约操作也有高度并行的可能。
MapReduce 把数据集的大规模操作分配到网络互联的若干节点上进行,以实现其可靠性;每个节点都会向主节点发送心跳信息,周期性地把执行进度和状态报告回来。假如某个节点的心跳信息停止发送,或者超过预定时隙,主节点标记该节点为死亡状态,并把先前分配到它的数据发送到其它节点。其中,每个操作使用命名文件的原子操作,避免并行线程之间冲突;当文件被改名时,系统可能会把它复制到任务名以外的其它名字节点上。
由于规约操作的并行能力较弱,主节点尽可能把规约操作调度在同一个节点上,或者距离操作数据最近(或次近,最近节点出现故障时)的节点上。
MapReduce 技术的优势在于对映射和规约操作的合理抽象,使得程序员在编写大规模分布式并行应用程序时,几乎不用考虑计算节点群的可靠性和扩展性等问题。应用程序开发人员把精力集中在应用程序本身,关于集群的处理问题等交由MapReduce 完成。
3.Hadoop 是如何构成的——基本架构
Hadoop 主要由HDFS(Hadoop Distributed File System)和MapReduce 引擎两部分组成。最底部是HDFS,它存储Hadoop 集群中所有存储节点上的文件。HDFS 的上一层是MapReduce 引擎,该引擎由JobTrackers 和TaskTrackers组成。
3.1 HDFS
HDFS 可以执行的操作有创建、删除、移动或重命名文件等,架构类似于传统的分级文件系统。需要注意的是,HDFS 的架构基于一组特定的节点而构建,这是它自身的特点。HDFS 包括唯一的NameNode,它在HDFS 内部提供元数据服务;DataNode 为HDFS 提供存储块。由于NameNode 是唯一的,这也是HDFS 的一个弱点(单点失败)。一旦NameNode 故障,后果可想而知。正所谓皮之不存,毛将焉附?
NameNode 可以控制所有文件操作。HDFS 中存储文件被分割成块,这些块被复制到多个节点中(DataNode)。块的大小(默认为64MB)和复制的块数量在创建文件时由客户机决定。
HDFS 内部的所有通信都基于标准的TCP/IP 协议。
NameNode
NameNode负责管理文件系统名称空间和控制外部客户机的访问。NameNode决定是否将文件映射到DataNode 上的复制块上。通常的策略是,对于最常见的3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
请注意,只有表示DataNode 和块的文件映射的元数据经过NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的DataNode IP 地址作为响应。此外,NameNode 还会通知其他将要接收该块副本的DataNode。
NameNode 在FsImage 文件中存储所有关于文件系统名称空间的信息,该文件和一个包含所有事务的记录文件将存储在NameNode 的本地文件系统上。
FsImage 和EditLog 文件也有副本,以防止文件损坏或NameNode 系统故障。
DataNode
Hadoop 集群包含一个NameNode 和N(N>=1)个DataNode。DataNode通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。通常,机架内部节点之间的传输速度快于机架间节点的传输速度。
DataNode 响应来自HDFS 客户机的读写请求,也响应NameNode 发送的创建、删除和复制块的命令;NameNode 获取每个DataNode 的心跳消息,每条消息包含一个块报告,NameNode 据此验证块映射和其他文件系统的元数据。如果DataNode 无法发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
3.2 Hadoop Map/Reduce
Hadoop Map/Reduce 引擎由JobTracker(作业服务器)和Task Tracker(任务服务器)组成。
Job Tracker
Job Tracker(Google 称为Master)是负责管理调度所有作业,它是整个系统分配任务的核心。它也是唯一的,这与HDFS 类似。因此,简化了同步流程问题。
Task Tracker
Task Tracker 具体负责执行用户定义操作,每个作业被分割为任务集,包括Map任务和Reduce 任务。任务是具体执行的基本单元, Task Tracker 执行过程中需要向Job Tracker 发送心跳信息,汇报每个任务的执行状态,帮助Job Tracker 收集作业执行的整体情况,为下次任务分配提供依据。
在Hadoop 中,客户端(任务的提交者)是一组API,用户需要自定义自己需要的内容,由客户端将作业及其配置提交到Job Tracker,并监控执行状况。与HDFS 的通信机制相同,Hadoop Map/Reduce 也使用协议接口来实现服务器间的通信。实现者作为RPC 服务器,调用者经由RPC 的代理进行调用。客户端与Task Tracker 以及Task Tracker 之间,都不再有直接通信。难道客户端就不需要了解具体任务的执行状况吗?不是。难道Task Tracker 相互无需了解任务执行情况吗?也不是。由于整个集群各机器的通信比HDFS 复杂的多,点对点直接通信难以维持状态信息,所以统一由Job Tracker 收集整理转发。
4.Hadoop 是如何工作的——运行流程
最简单的MapReduce 应用程序至少包含3 个部分:一个Map 函数、一个Reduce 函数和一个main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为Hadoop 应用程序开发人员提供许多工具,可用于调试和性能度量等。
MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的map 和reduce 函数。它由两个可能包含有许多实例(许多Map 和Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。
一个代表客户机在单个主系统上启动的MapReduce 应用程序称为JobTracker。类似于NameNode,它是Hadoop 集群中惟一负责控制MapReduce 应用程序的系统。在应用程序提交之后,将提供包含在HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)确定如何创建其他TaskTracker 从属任务。MapReduce 应用程序被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务。每个TaskTracker 将状态和完成信息报告给JobTracker。
Hadoop 是如何并行的——任务粒度
Map 调用把输入数据自动分割成M 片,并且分发到多个节点上,使得输入数据能够在多个节点上并行处理。Reduce 调用利用分割函数分割中间key,从而形成R片(例如,hash(key) mod R),它们也会被分发到多个节点上。分割数量R 和分割函数由用户来决定。
由上的分析可知,我们细分map 阶段成M 片,reduce 阶段成R 片。在理想状态下,M 和R 应当比worker 机器数量要多得多。每个worker 执行许多不同的工作来提高动态负载均衡,并且能够加快故障恢复的速度,这个失效机器上执行的大量map 任务都可以分布到所有其他worker 机器上执行。
但是在具体编程中,实际上对于M 和R 的取值有一定的限制,因为master 必须执行O(M+R)次调度,并且在内存中保存O(M*R)个状态。(对影响内存使用的因素还是比较小的:O(M*R)块状态,大概每对map 任务/reduce 任务1 个字节就可以了)。进一步来说,用户通常会指定R 的值,因为每一个reduce 任务最终都是一个独立的输出文件。在实际中,我们倾向于调整M 的值,使得每一个独立任务都是处理大约
注释:
文中翻译 |
Hadoop术语 |
Google术语 |
相关解释 |
作业 |
Job |
Job |
用户的每一个计算请求,就称为一个作业。 |
作业服务器 |
JobTracker |
Master |
用户提交作业的服务器,同时,它还负责各个作业任务的分配,管理所有的任务服务器。 |
任务服务器 |
TaskTracker |
Worker |
任劳任怨的工蜂,负责执行具体的任务。 |
任务 |
Task |
Task |
每一个作业,都需要拆分开了,交由多个服务器来完成,拆分出来的执行单位,就称为任务。 |
备份任务 |
Speculative Task |
Buckup Task |
每一个任务,都有可能执行失败或者缓慢,为了降低为此付出的代价,系统会未雨绸缪的实现在另外的任务服务器上执行同样一个任务,这就是备份任务。 |
个人总结:
李俊:在收集资料的同时,学习并找出问题解决问题,是自己对云计算的知识有了进一步了解,对Hadoop的知识与技术有了更全面的认识。
吴喆:通过这一阶段的学习,了解了HaDooP云计算是如何运行的,以及完成过程。并且知道了,他所要达到的目的。
胡凡:这次的学习让我了解了HaDooP云计算的相关知识,知道了它的原理,构成等。有助于我对于后面知识的学习。还是一样。继续努力!
赵宇航:了进一步了解了hadoop云计算的内容,运行的过程逐渐了解了,对其中产生的疑问,进行分析和解决,对后面的知识起到铺垫的作用。
下一步计划将对Hadoop理论与实践进行进一步学习与研究。