计算机应用技术论文

您当前的位置:学术堂 > 计算机论文 > 计算机应用技术论文 >

Hadoop理论基础简介

来源:学术堂 作者:姚老师
发布于:2017-02-23 共6440字
  本篇论文快速导航:

展开更多

  第 2 章 Hadoop 理论基础简介

  2.1 Hadoop 简介。

  Hadoop 起源于 Apache Nutch-Apache Lucene 的子项目之一,是 Apache 软件基金会旗下的一个开源分布式计算框架,是用 Java 语言开发的。从 2002 年创建之初,直到 2006 年 Hadoop 才逐渐成为一套完整并且独立的软件,并正式命名。Hadoop 是创建者 Doug Cutting 的孩子的一个玩具小象的名字。到 2008 年初,Hadoop 已经成为 Apache 的顶级项目,并且被很多互联网公司采用。2009 年 4月份,Hadoop 以 59 秒内排序 500GB 的数据和 173 分钟内排序 100TB 的数据打破了世界记录[44].

  Hadoop 可以搭建在大量廉价的计算机集群上,使用者可以很容易开发和运行大数据的分布式程序。同时,也提供了一组既稳定又可靠的接口。目前,Hadoop已经取得了非常突出的成就,这都归功于它突出的优势:

  ① 高容错性Hadoop 的一个关键优势就是它的容错能力。Hadoop 能自动保存数据的多个副本,当数据被发送到一个单独的节点时,集群中的其它节点上也有该数据的复本。也就是说若某一节点出现故障,存储在其它节点上的副本还能使用,它能自动将失败的任务进行重新分配。

  ② 高扩展性Hadoop 是一个高度可扩展的存储平台。Hadoop 可以运行在廉价的服务器集群上,并在这些集群间进行数据分配从而完成计算任务。

  ③ 经济性所谓经济性主要有两个原因。一是 Hadoop 是开源的,谁都可以自由下载Apache Hadoop 的发行版,这样就可以降低成本。同时,Hadoop 可以运行在廉价的 PC 机上从而控制了成本,用户不必购买昂贵的服务器级硬件,便可以搭建一个强大的 Hadoop 集群平台。

  ④ 高可靠性Hadoop 采用数据备份恢复机制以及任务监控机制,保证了分布式计算的可靠性,同时 Hadoop 具有按位存储和处理数据的能力。

  ⑤ 高效性Hadoop 的高效性表现在其能够在数据所在的集群节点上并发的处理,这就使得 Hadoop 在处理大数据时速度非常快。

  2.1.1 Hadoop 框架及其生态系统。

  近年来,基于 Hadoop 的子项目不断的开发,保证了不同的应用需要,包括Hadoop 分布式文件系统(以下简称 HDFS)、MapReduce、Hive、HBase、Sqoop、Pig 和 ZooKeeper 等,图 2.1 为 Hadoop 架构图。其中最核心、最基础的内容是HDFS 和 MapReduce,这两个部分将在后续的 2 个小节中做详细的介绍。

  现在介绍一下 Hadoop 主要子项目:

  ① HBaseHBase[14]是建立在 HDFS 上的一个分布式的、面向列的开源数据库,具有高容错性和高可扩展性,可以实时地随机读写超大规模的数据集。HBase 并不是关系型数据库,它不支持 SQL.HBase 是基于列的存储模式,适合于非结构化数据存储的数据库。

  ② PIGPIG[13]为大型数据集的处理提供了更高层次的抽象,用于分析大数据集的平台。PIG 包括两个部分:用于描述数据流的语言-Pig Latin;用于运行 Pig Latin程序的执行环境。PIG 的执行环境把数据流翻译成可执行的内部表示并运行它。

  在 PIG 内部这些变换操作被转化成一系列的 MapReduce 作业。作为程序员,多数情况下并不需要知道这些转化是如何进行的,这样一来,程序员便可将精力集中在数据上而非执行的细节上。

  ③ HiveHive[12]是一个建立在 Hadoop 之上的数据仓库架构,由 Facebook 开发。Hive提供了一个类 SQL 的查询语言-HiveQL,用于即席查询,也可用于大型数据集的分析查询。Hive 专为批量处理而设计,而不是联机事务处理,熟悉 SQL 的用户很容易使用 HiveQL.

  ④ ZooKeeperZooKeeper[45]是 Hadoop 的分布式协调服务。由于部分失败是分布式系统固有的特征,所以 ZooKeeper 可以提供一组工具,使得在构建分布式应用时能够对部分失败进行正确处理,但是使用 ZooKeeper 并不能根除部分失败。

  ⑤ FlumeFlume[16]是一个分布式、高可靠和高可用的海量日志采集系统,可以实现日志的实时收集。

  ⑥ AvroAvro[46]是一个数据序列化系统。支持二进制序列化方式、支持大批量数据交换,可以方便快捷地处理大量数据。

  2.1.2 第二代 Hadoop 平台-YARNYARN.

  直接源于 MRv1(第一代 MapReduce)在几个方面的缺陷:单点故障,由于第一代 Hadoop 将业务逻辑和资源管理集中在 JobTracker 上,容易产生单点性能瓶颈;难以支持 MR 之外的计算,多计算框架各自为战,数据共享困难,资源利用率低、支持作业类型少等问题。MapReduce 是一个低效的批处理计算框架,一般用来做一些离线的计算,不适合交互式计算、实时计算等场景。基于以上问题,出现了第二代 Hadoop 平台-YARN.图 2.2 为两代平台框架的对比。

  Hadoop2.0 由 HDFS、Mapreduce 和 YARN 三个分支构成:HDFS:NN Federation、HA(高可用,High Availability);Mapreduce:运行在 YARN 上的 MR;YARN:是一个资源管理系统,负责集群的资源管理和调度,MapReduce 则是运行在 YARN 上离线处理框架,它与 Hadoop 1.0 中的 MapReduce 在编程模型(新旧 API)和数据处理引擎(MapTask 和 ReduceTask)两个方面是相同的;唯一不同的,也就是 YARN 的优势就是将资源管理和任务调度这两个模块分开实现,分别由 ResourceManager 和 ApplicationMaster 进程实现。ResourceManager:负责整个集群的资源管理和调度;ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等;每个应用程序对应一个 ApplicationMaster.

  YARN 仍然采用 Master/Slava 架构 , 它主要以下几部分组成 :

  ResourceManager,ApplicationMaster,NodeManager.

  ①ResourceManager:简称 RM,是 YARN 的 Master,具有中心化的全局资源视图,处理客户端请求,启动/监控 ApplicationMaster,监控 NodeManager,资源分配与调度,根据应用需求、调度优先级和资源情况等,动态调整资源。负责资源管理的主服务,整个系统只有一个,它支持可插拔的资源调度器,自带了 FIFO、Fair Scheduler 和 Capacity Scheduler 三种调度器;ResourceManager 容错需要注意的是 , 该功能完成度非常低 , 仅支持ResourceManager 因故障挂掉重启后,可以恢复之前正在运行的应用程序(用户不需要重新提交),其中已经运行完成的任务无需重新运行,但正在运行的和尚未运行的任务需要重新运行。

  ②NodeManager:简称 NM,是 YARN 的 slave,负责将任务执行情况和心跳信息汇报给 ResourceManager,并接收来自 ApplicationMaster 的命令以启动Container(YARN 中对资源的抽象),回收 Container 等;单个节点上的资源管理,处理来自 ResourceManager 的命令,处理来自 ApplicationMaster 的命令。

  ③ ApplicationMaster : 简称 AM , 负责管理单个应用程序 , 它向ResourceManager 申请资源,并使用这些资源启动内部的任务,同时负责任务的运行监控和容错等;数据切分,为应用程序申请资源,并分配给内部任务。

  ④Container:对资源的抽象,它封装了节点上的资源,如 CPU 和内存等,当 ApplicationMaster 获得一个 Container 后就可以执行任务 , 另外 ,ApplicationMaster 本身也是运行在一个 Container 之中。

  目前可运行在 YARN 上的计算框架 : 包括 MapReduce-On-YARN 、Spark-On-YARN、Storm-On-YARN 和 Tez-On-YARN.

  MapReduce-On-YARN:YARN 上的离线计算,YARN 发行版中自带该实现,随着 YARN 的稳定,MRv1 运行方式会被淘汰。

  Spark-On-YARN:YARN 上的内存计算。

  Storm-On-YARN:YARN 上的实时/流式计算。

  Tez-On-YARN:YARN 上的 DAG 计算。

  在资源管理方面,Hadoop 2.0 比 1.0 先进的多,它摒弃了基于 slot 的资源管理方案,采用了基于真实资源的管理方案,这将在资源利用率、资源控制、资源隔离等方面有明显改善,随着 Hadoop 2.0 调度语义的丰富和完善,它必将发挥越来越大的作用。

  2.1.3 Hadoop 的应用现状和发展趋势。

  (1)Hadoop 在国外的应用现状。

  2008 年,雅虎建立了最大的 Hadoop 的集群系统-Yahoo!Search WebMap.

  这个系统被广泛的应用到日志处理、广告分析和科学研究中;Amazon 公司采用Hadoop 来实现商品搜索的索引;Last.fm 互联网电台和音乐网站利用 Hadoop 集群来解决日志处理、A/B 测试评价以及 AdHoc 计算等日常工作;FaceBook 利用Hadoop构建了整个网站的数据仓库并运用Hadoop框架在320多台机器上进行网站的日志分析和数据挖掘;各大高校也对 Hadoop 进行了应用和研究,例如 UCBerkeley 改进了 Hadoop 的推测执行技术并且改进了 MapReduce 体系等。

  (2)Hadoop 在国内的应用现状。

  国内的诸多企业也对 Hadoop 进行了研究,如 Alibaba、中国移动、腾讯和百度等。Alibaba 应用 Hadoop 平台存储并分析用户的交易数据;中国移动研究院应用 Hadoop 集群对处理数据也对外提供云服务;百度搭建 Hadoop 集群进行日志处理和网页数据的分析;在 2008 年之后,国内的诸多城市都举办过 Hadoop技术专题会议,如 2011 年中科院在北京主办了第五届 Hadoop in China 大会,加速了 Hadoop 在国内的发展。

  从 Hadoop 的应用上可见,大部分企业应用 Hadoop 是为了数据挖掘、日志分析、Web 搜索和改善商业智能分析。目前,Hadoop 的应用较为成熟,随着技术的更新和新一代商业模式的出现,Hadoop 的应用也会拓展到更多的行业中。

  2.2 Hadoop 分布式文件系统

  2.2.1 HDFS 简介。

  Hadoop 分布式文件系统简称 HDFS,可以运行在通用且廉价的硬件上,能够高效地存储海量数据。HDFS 与 MapReduce 的结合,更加适用于大数据集应用并且能够为应用程序提供高吞吐量的数据访问。Hadoop的优点主要是基于HDFS文件系统的设计目标,底层文件系统的管理是海量数据计算平台资源管理的关键,是平台优劣的基础。HDFS 的设计的优势为:

  ①超大规模数据集随着数据量的暴增,大多数企业都积累了 TB 或以上级别的数据,而大数据量的存储却是亟待解决的问题,HDFS 可以扩展到上百个节点。

  ②数据一致性模型HDFS 支持一次写入和多次读取的文件操作。当一个文件已经创建之后就不能再更改了,从而解决了数据一致性问题。

  ③移动计算的模式。

  HDFS 提供了这样一个端口:对于应用端来说,数据离的越近效率越高,HDFS能将计算移动到数据附近,这样的计算模式比起移动数据来说更加有效。

  ④数据完整性。

  HDFS 可以在不同的节点上存储数据的很多副本,若某一节点的数据出现错误,那么 HDFS 可以从其它节点上获得完整的数据。

  ⑤容错性。

  HDFS 采取了副本策略,数据自动保存多个副本,副本丢失后,自动恢复。

  ⑥经济性。

  Hadoop 可以运行在廉价的普通商业硬件上,因而不需要购买昂贵的服务器集群。

  2.2.2 HDFS 工作原理。

  HDFS 是 Master/Slave 结构。HDFS 由一个 NameNode 和多个 DataNode 构成。

  NameNode 是主节点,就像是人类的大脑,支配着 DataNode 的各项操作,包括文件的命名、存储位置、和访问操作等;DataNode 是从节点,就像人类的四肢,它接收来自 NameNode 的命令,并定期向 NameNode 发送心跳信息,其主要职责是存储数据,NameNode 会根据情况指定存储到哪些 DataNode 上,而 NameNode本身并不存储真实的数据,DataNode 之间也会相互通信,来进行数据块的复制。

  HDFS 的体系结构。

  HDFS 的文件通常是按照 64MB 被切分成不同的数据块,每个数据块分散存储在不同的 DataNode 中,而若干个数据块存放在一组 DataNode 上。

  当客户端要请求数据时,先向 NameNode 发送请求信息,然后 NameNode 给客户端返回该数据块的相关信息,最后客户端就可以到指定的 DataNode 上读取数据。

  从图 2.3 可以看到 HDFS 有四个主要的组成部分:

  ①NameNode.

  NameNode 是 HDFS 的守护进程,主要负责记录数据如何分割成数据块以及分割后的数据块被存储的 DataNode 节点信息。NameNode 所做的工作就是管理并不存储任何用户信息或执行计算任务,这样可以增强服务器的性能。如果DataNode 服务器因出现软、硬件的宕机问题,Hadoop 集群依然可以继续运行,或者快速重启。由于 NameNode 是 HDFS 集群中的一个单点,一旦 NameNode服务器宕机,整个系统将无法运行,文件系统上所有的文件将会丢失。为此,Hadoop 提供了一个辅助的 NameNode,即 SecondaryNamenode.

  ②SecondaryNamenode.

  对 NameNode 上保存的元数据信息进行备份,分担 NameNode 的工作量,合并 fsimage 和 fsedits 然后再发给 NameNode.SecondaryNamenode 是 Namenode的冷备份,所谓冷备份就是如果 NameNode 坏掉,那么 SecondaryNamenode 根据保存的元数据信息来恢复 NameNode,是对 NameNode 实现的冗余备份而并不会代替 NameNode 工作。

  ③DataNode.

  DataNode 接受 NameNode 的命令从而进行对数据块的操作。而且定期将作业的执行信息和数据块信息发送给 NameNode.它是负责对数据文件的读写请求。

  ④Client 就是获取分布式文件系统中文件的应用程序。

  这里有必要说明一下数据块的复制和存放策略,因为 HDFS 能在一个大集群中可靠的存储数据归功于它的冗余性。数据块的副本系数默认是 3.如图 2.3 所示,副本的存放策略是将一个副本放在本地机架的节点上;第二个副本是放在同一个机架的不同的节点上;最后一个副本是放在不同机架的任意一个节点上。这样的副本存放机制减少了机架间的文件传输,增强了文件的读写操作。

  2.3 MapReduce 编程模型。

  2.3.1 MapReduce 简介。

  MapReduce 框架源于 Google 在云计算领域的第二篇关于 MapReduce[11]

  的论文。MapReduce 是一种编程模型,能够快速处理大型计算机集群中的海量数据。

  MapReduce 框架的出现,使得没有并行程序开发经验的程序员,也能很容易的完成 MapReduce 的开发,这也是它的优势所在。MapReduce 使用键值对<key,value>

  的方式对数据进行分布式处理,这个处理过程分为两个阶段,即 Map 阶段和Reduce 阶段,每个阶段都会将一种类型的键值对转化为另一种类型的键值对,Map 函数负责分解和执行任务,而 Reduce 函数负责合并 Map 函数的处理结果,即将相同 key 下的所有 value 进行合并后输出的键值对作为最终结果。

  MapReduce 是处理海量数据的并行编程模型,采用的是"分而治之"的思想。

  在 Map 阶段,MapReduce 框架将任务的输人数据拆分成固定大小的数据片,并将每一个数据片分解成一批键值对作为输出。然后得到的结果根据 key 值分别对应不同的 Reduce 任务。

  在 Reduce 阶段,任务将不同 Map 接收来的数据整合到一起,并进行排序。

  然后调用 Reduce 函数最终得到一个合并的结果输出到 HDFS 上。

  2.3.2 MapReduce 工作原理。

  MapReduce 使用 JobTracker 和 TaskTracker 控制 Job 的运行:JobTracker 相当于 HDFS 的 NameNode,协调 Job 的运行,负责管理调度所有作业,将 task 分配到不同的 TaskTracker 上,JobTracker 使用文件块信息确定如何创建其他TaskTracker 从属任务;TaskTracker 负责运行 task,并将结果返回给 JobTracker,TaskTracker 相当于 DataNode,运行此 Job 的 task,该 TaskTracker 有两个线程:

  一个是 MapTask,一个是 ReduceTask.MapReduce 的工作原理。

  流程分析:

  ①JobTracker 接收来自客户端的 Job 请求。

  ②JobTracker 会构建这个 Job,具体操作就是分配一个新的 JobID,检查是否指定了输出目录,并且确认输出目录不存在,如果存在那么 Job 就不能正常运行下去,JobTracker 会抛出错误给客户端。

  ③下一步就是配置 Job 需要的资源,初始化作业。

  初始化就是创建一个正在运行的 Job 对象(封装任务和记录信息),以便JobTracker 跟踪 Job 的运行状态和进程。

  ④作业调度器将输入划分为若干个子作业,每个作业对应一个 TaskTracker来执行。TaskTracker 定期会向 JobTracker 发送心跳信息,汇报 TaskTracker 的状态、作业运行状况,也会请求 JobTracker 分配作业来做。

  2.4 本章小结。

  本章节主要介绍了Hadoop平台,简述了Hadoop国内外应用现状和发展趋势,详细分析了 HDFS 和 MapReduce 框架,为后续的工作奠定了夯实的理论基础识。

  Hadoop 凭借其独特的优势如分布式的 HDFS 数据存储;MapReduce 结合数据局部性的数据分析和可靠的负载均衡极大的提高了 Hadoop 处理海量数据的能力。 HDFS 的冗余机制和 Hadoop 的心跳机制,保证了数据的备份恢复,任务的失败重做,Hadoop 的数据处理能力值得人们信赖。这些优点让 MapReduce 程序的开发变得简单,开发人员不需要关心分布式的容错、效率、底层架构,只需要专注于 Map 函数和 Reduce 函数的编写。

返回本篇论文导航
相关内容推荐
相关标签:
返回:计算机应用技术论文