Hadoop平台在云计算上的应用

1 Hadoop 介绍

      Hadoop是由Apache 开源组织的一个分布式计算框架,可以在大量廉价的硬件设备组成的集群上运行应用程序,为应用程序提供了一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。Hadoop 的主要优点[3] 有:扩容能力强、成本低廉、效率高、高可靠性、免费开源及良好的可移植性。

      Hadoop 集群是典型的Master/Slaves 结构,NameNode与JobTracker 为Master,DataNodes 与TaskTrackers 为Slaves。NameNode 与DataNodes 负责完成HDFS 的工作,JobTracker 与TaskTrackers 则负责完MapReduce 的工作。

      Apache Hadoop 项目包括多个子项目,但主要是由Hadoop分布式文件系统HDFS 和计算模型MapReduce 两个主

要的子项目组成。

1.1 Hadoop 分布式文件系统HDFS

      HDFS被设计成适合运行在通用硬件上的分布式文件系统,它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式文件系统的区别也显而易见。HDFS 是一个具有高度容错性的系统,适合部署在廉价的机器上。HDFS 能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS设计是基于如下的前提和目标:

(1)硬件错误是常态而非异常:HDFS 可能有成百上千的服务器组件构成,每个组件上存储着文件系统的部分数据。任何一个组件失效都是有可能的,也就意味着总有一部分HDFS的组件是不正常工作或者不工作的。如此一来,错误检测和快速、自动化地恢复是HDFS 最核心的设计目标之一。

(2)数据流式访:HDFS 的设计中更多地考虑到了数据批处理,而不是用户交互处理,由此保证数据访问的高吞吐量。

(3)大规模数据集:HDFS 上的一个典型文件大小一般都在GB 级至TB 级,甚至更高的PB 级。因此,HDFS 被设计以支持大文件存储,并能提供整体上的数据传输带宽,能在一个集群里扩展到数百个节点。

(4) 简单的一致性模型:HDFS 应用需要一个“一次写入多次读取”的文件访问模型。文件经过创建、写入和关闭之后就不需要改变,使高吞吐量的数据访问成为可能。

(5) 移动计算比移动数据更划算:一个应用请求的计算,离它操作的数据跃进就越高效,在数据达到海量级别的时候更是如此。为了能够降低网络阻塞,提供系统数据的吞吐量,HDFS为应用提供了将计算移动到数据附近的接口。

(6)构软硬件平台间的可移植性:该特性方便了HDFS作为大规模数据应用平台的推广。

一个HDFS 集群是由一个NameNode 和一定数目的Datanodes 组成,NameNode 是一个中心服务器,负责管理文件系统的名字空间(Namespace)以及客户端对文件的访问。集群中的DataNode 一般是一个节点一个,负责管理它所在节点上的存储。HDFS 对外公开文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块(Block),这些块存储在一组DataNode 上。NameNode 执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录,它也负责确定数据块到具体DataNode 节点的映射。Datanode负责处理文件系统客户端的读写请求,在NamenNode 的统一调度下进行数据块的创建、删除和复制。

1.2 计算模型MapReduce

MapReduce[6] 是由Google 提出的云计算核心计算模型,Hadoop 计划将它开源化实现。MapReduce 是一种高效的分布式计算模型,同时是一种用于处理和生成大规模数据集的实现方式。

(1)Input: 应用程序提供Map 和Reduce 函数,并指明输入/ 输出的位置和其他运行必要的运行参数。该阶段会把输入目录下的大文件划分为若干独立的数据块。

(2)Map:MapReduce 模型把用户作业的输入看作是一组<key,value> 键值对,模型会调用用户自定义的Map函数处理每一个<key,value> 键值对,生成一批新的中间<key,value> 键值对,这两组键值对的类型可能不同。

(3)Shuffle&Sort: 为了保证Reduce 的输入是Map 排好序的输出。在Shuffle 阶段,通过网络为每个Reduce 获得所有Map 输出中与之有关的<key,value> 键值对;而在Sort 阶段,将按照key 的值对Reduce 的输入进行分组。通常Shuffle 和Sort 两个阶段是并行执行的。

(4)Reduce: 对每一个唯一key,执行用户定义的Reduce函数,输出新的<key,value> 键值对。

(5)Output: 将Reduce 输出的结果写入输出目录中。Hadoop 采用JobTracker/TaskTrackers 的主从式结构来实现MapReduce 编程模型。JobTracker 来分配Map 任务或Reduce 任务;TaskTracker 执行由JobTracker 发来

的指令并同时处理Map 和Reduce 阶段之间数据的移动,每个TaskTracker 节点会定期报告任务完成状态。如果一个TaskTracker 不能按照要求在特定时间间隔内完成被分配给的工作,那么JobTracker 会将分配给这个节点的数据发到别的节点上,并将该节点定义为不工作状态。

2 基于Hadoop 的云计算模型

在该模型中,用户的数据将被分割成多个数据块存储在每一个Slave 的DataNode 上,之后NameNode 负责管理这些数据块。用户的计算任务被分成多个Map 任务和Reduce 任务,JobTracker 负责启动、跟踪和调度Map 任务和Reduce 任务,这些任务是由每一Slave 的TaskTracker 所执行的。Job-Tracker 也同时侦测TaskTracker 的运行状况,必要时重新执行某个任务。计算结果会保存在用户指定的目录下。


猜你喜欢

转载自huanglz19871030.iteye.com/blog/1514614