yarn原理_深度 | 一文带你了解Hadoop大数据原理与架构

a2f93bedba9ae059ac6eb80e3a3f4eef.gif

0538e8f0ae22989cb4abdd42c64ff2ec.png

分享嘉宾:冰河

编辑整理:柠檬精

出品平台:北京大学出版社

一、Hadoop原理

Hadoop的核心由3个部分组成:Hadoop HDFS、MapReduce和YARN。 HDFS(Hadoop Distributed File System)是一个分布式文件系统,具有低成本、高可靠性,高吞吐量,高容错性和高可扩展性等特点,能够部署在廉价的机器上,存储海量的数据信息。 MapReduce编程模型由两个阶段组成:Map阶段和Reduce阶段。用户只需要简单的编写map()和reduce()两个函数,即可完成简单的MapReduce程序设计。 map()函数以键值对(key-value)的形式作为输入,经过一系列的处理之后,将中间结果以另外的键值对(key-value)的形式输出到本地磁盘。期间,MapReduce编程模型会自动将中间结果数据按照相关的key进行聚合,并按照不同的key将中间结果数据交由不同的reduce()函数处理。 reduce()函数的输入参数是一个key和这个key对应的value列表,经过处理后,会输出最终结果的key和value。流程可用如下代码表示:

{K1,V1} -> {K1, List} -> {K1, V2}

在新版本的Hadoop中,通过将原有JobTracker中与应用程序相关和无关的模块分开,抽象为一个统一的资源管理平台,这个统一的资源管理平台就是YARN。这也使得Hadoop可以整合多种计算框架,且对这些框架进行统一管理和调度。

1.  Hadoop HDFS原理

Hadoop 的分布式文件系统能够运行在廉价的服务器集群上,为大数据的分析和计算提供海量数据的存储支持。在实现和部署上,一个 HDFS 系统,由一台运行了 NameNode 的服务器,和 N 台运行了 DataNode 的服务器组成。 如图 1 所示,就是一个简单的 HDFS 分布式文件系统的模型。

422d89a2e0b2377288e8353bd5219fbb.png

图1    HDFS分布式文件系统简单模型

由图 1 可以看出, HDFS 集群模型可以简单的分为一台 NameNode 服务器和多台 DataNode 服务器。 接下来,探讨下 HDFS 中存储文件的模型, HDFS 中存储文件的模型如图 2 所示。

8e2f65b769419bc8eebf7ebcfdea8747.png

图2   存储文件的模型

由图 2 可以看出:
  • HDFS客户端与服务端进行交互,将文件存储在HDFS集群中。

  • HDFS服务端将客户端传来的文件,根据参数进行切换、复制,并将这些块存储在HDFS的DataNode节点中。

  • HDFS的NameNode节点记录某个文件的元数据信息(元数据信息包含:文件大小,文件路径,文件块存储的位置,副本信息等)。

说明:对于客户端来说,访问的文件系统路径为 /data/ces.log 。客户端并不关心底层文件被切分为多少个块,每个块存储的具体位置在哪,同样也不需要关系 ces.log 文件在服务端有多少个副本,对于客户端来说,只要能正确访问到 /data/ces.log 文件就可以了。 同样,客户端读取服务端的数据需要一系列的步骤或流程来满足相关的需求。 HDFS 读取数据的流程如图 3 所示。

675537262ee8ffe80a886865ed4c9e74.png

图3     HDFS读取数据的流程图

由图 3 所示,可以总结出 HDFS 读取数据的流程如下:

(1)HDFS客户端请求读取数据 get /data/ces.log。

(2)NameNode收到消息,返回对应文件的元数据信息。

(3)根据对应的元数据信息,向指定的DataNode节点请求读取文件块。

(4)DataNode节点向客户端响应文件块数据流,客户端接收到文件块数据流,然后通过本地文本输出流将数据写入ces.log文件块。

(5)重复3-4的步骤,最终得到完整的文件。

(6)重复3-4的步骤,最终得到完整的文件。

(7)重复3-4的步骤,最终得到完整的文件。

(8)重复3-4的步骤,最终得到完整的文件

HDFS 写文件的过程比读文件要稍微复杂些,具体过程如图 4 所示。

751fcd3aef1f9426bb29a914cc11144f.png

图4     HDFS写文件的流程图

由图 4 ,可以总结出 HDFS 写文件的大体流程如下:

(1)HDFS客户端向NameNode节点发送写文件请求。

(2)NameNode节点向客户端响应可以写文件的信息。

(3)HDFS客户端向NameNode节点请求要写入的DataNode节点。

(4)NameNode返回可以进行写DataNode的节点主机列表,主机列表中主机的数量由配置的文件副本数决定。

(5)客户端选择HDFS集群中的某个DataNode节点,请求建立数据连接准备写入数据。

(6)DataNode节点向HDFS客户端响应可以写数据。

(7)客户端向DataNode节点写数据。

(8)DataNode节点向客户端响应写数据的结果信息。

(9)DataNode节点之间复制数据。

(10)DataNode节点之间复制数据。

(11)重复3-10的操作,进行剩余文件块的写入。

(12)数据写完后通知NameNode,由NameNode确认并记录元数据。

2.  Hadoop MapReduce原理

MapReduce 是基于批处理的分布式计算框架,是基于 Google 的 MapReduce 论文实现的大规模分布式并行处理框架( MapReduce 编程模型在 Google 上的链接地址为: http://research.google.com/archive/MapReduce.html )。 MapReduce 将一个数据处理过程拆分为主要的 Map (映射)和 Reduce (化简)两步。

这样,用户无需关注分布式计算框架的内部运行机制,只要能正确的编写map()函数和reduce()函数,就能轻松的使问题的计算实现分布式,并在Hadoop上运行。MapReduce的编程具有以下特点:

1.开发简单

用户无需考虑复杂的进程间通信、套接字编程,只需要编写map()函数和reduce()函数实现一些非常简单的逻辑,其他的交由MapReduce计算框架去完成,大大简化了分布式编程的编写难度和入门门槛。

2.扩展性强

同HDFS一样,当集群资源不能满足计算需求时,只需要通过简单的增加节点和相关的配置就可以达到线性扩展集群的目的。

3.容错性强

当出现节点故障导致作业失败时,MapReduce计算框架会自动将失败的作业安排到健康节点重新执行,直到任务完成,而用户则完全不必关心这些实现的内部处理细节。

MapReduce 充分借鉴了分而治之的思想,以键值对的形式来操作数据。具体可以分为数据输入阶段、 map 阶段、中间结果处理阶段(包括: combiner 阶段和 shuffle 阶段)和 reduce 阶段。 数据输入阶段:用户或其他系统将数据输入 MapReduce 系统 .

map阶段:map()函数会以键值对的形式作为输入,经过map函数的完全并行化处理,产生一系列新的键值对作为中间结果输出到本地。

中间处理阶段:这个阶段包括combiner阶段和shuffle阶段,在这个阶段MapReduce计算框架会自动将这些中间结果数据按照键做排序、聚合等一系列处理,并将键相同的数据分发给同一个reduce函数处理(用户可以实际情况设置分发规则)。

reduce阶段:reduce函数以键和对应的值的集合作为输入,经过reduce函数的处理后,产生一系列键值对作为最终结果输出到HDFS分布式文件系统中。

如果用表达式表示MapReduce的过程,可以如下所示:

{K1, V1} -> {K1, List} -> {K1,V2}

在上述的整个过程中,作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

3Hadoop YARN原理

Hadoop 1.0 中的 MapReduce ,通常也被称为 MRv1 ,这个版本的 MapReduce 存在很多的局限性,比如:可伸缩性差、资源利用低、扩展性和可靠性差等, MRv1 具体的局限性如下。 1. 扩展性差

在MRv1中,JobTracker需要同时处理资源管理和作业控制两个业务功能,大量的功能堆积在JobTracker上,同时JobTracker还存在单点故障的问题,严重制约了Hadoop集群的扩展性。

2. 可靠性差

MRv1虽然采用了master/slave结构。但其中master存在单点故障问题,一旦master宕机,则整个集群将不可用,将停止所有的分析和计算工作。此时,只能通过人为的重启master节点来使集群继续工作。

3. 资源利用率低

在MRv1中,一个任务在整个执行过程中独占一个任务槽,往往一个任务不会用完槽对应的资源,并且其他任务也无法使用这些槽内的空闲资源。同时,很多任务槽之间的资源也不是共享的,这就会导致出现一种槽位资源紧张而另外一种却是闲置的状态的现象,极大的浪费了相关的计算资源。

4. 无法支持多种计算框架

MRv1只支持MapReduce这一种离线批处理计算框架,对于其他的内存式计算和流式计算等,无法提供很好的支持方案。

为了克服 MRv1 的缺点, Hadoop 的开发者们开始对 Hadoop 进行升级,下一代 MapReduce 计算框架 MRv2 诞生了。 MRv2 将资源管理功能抽象成了一个独立的通用系统 YARN ,直接导致下一代 MapReduce 的核心从单一的计算框架 MapReduce 升级为通用的资源管理系统 YARN 。 YARN 框架主要包括 ResourceManager 、 ApplicationMaster 、 NodeManager 。 YARN 框架包含的模块和对应的主要功能如图 5 所示。

72558066ca35ffaa07a6e4984b9ace95.png

图5    YARN包含的模块和对应的功能

从图 5 可以得出如下的结论:
  • YARN框架主要由ResouceManager、ApplicationMaster、NodeManager组成。

  • ApplicationMaster同ResourceManager一起实现资源的协调功能。

  • ApplicationMaster同NodeManager一起实现任务的运行并监控任务的运行状态。

  • ResourceManager同NodeManager一起实现管理用户在机器上的进程并对计算进行组织。

YARN 实际上是一个弹性计算平台, 它的目标已经不再局限于支持 MapReduce 一种计算框架,而是支持多种计算框架并存。这种多个框架并存的共享集群模式相比于 MRv1 来说,有着很明显的优势:

1.资源利用率高

共享集群模式则通过多种框架共享资源, 使得集群中的资源得到更加充分的利用,这就避免了一种槽位资源紧张而另外一种却是闲置的状态的现象出现。

2.运维成本低

共享集群模式不再需要大量的运维人员共同完成服务器的运维工作,只需要少量的运维人员即可,大发的降低了运维的成本。

3.数据共享

共享集群模式可以让不同的框架共享硬件资源和数据资源,减少了不同框架之间数据的移动操作,这也从侧面提高了数据的处理性能。

二、Hadoop架构

在前面的章节,已经了解到 Hadoop 的核心由 Hadoop HDFS 、 MapReduce 和 YARN 组成。本节,就对 Hadoop 中的 HDFS 架构、 MapReduce 架构和 YARN 架构进行简单的介绍。

1.  Hadoop HDFS架构

HDFS 是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上, HDFS 能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。 HDFS 的架构总体上采用了 Master/Slave 架构,主要由以下几个组件组成: HDFS 客户端、 NameNode 、 SecondNameNode 和 DataNode ,总体架构如图 6 所示。

6b206b2e4fbd86db107fc9375699efe0.png

图6    HDFS 架构图

  • NameNode:主NameNode(有且只有一个处于活跃状态的NameNode),负责保存并管理元数据信息,处理客户端的请求,管理DataNode集群。

  • Secondary NameNode:定期合并fsimage和edits log日志,并推送给NameNode。

  • DataNode:实际存储数据的节点,并在节点上执行数据的分析和计算。

  • HDFS客户端:访问HDFS并进行数据交互的HDFS客户端。

下面是 Apache Hadoop HDFS 的官方架构图,如图 7 所示。

2aef97e41f4549b28c0bd356cdff6b5a.png

图7      Apache Hadoop HDFS官方架构图

HDFS 数据上传原理可以参考图 7 所示,数据上传过程可以简单的概括如下:

(1)Client端发送一个添加文件到HDFS的请求给NameNode;

(2)NameNode告诉Client端如何来分发数据块以及分发的位置;

(3)Client端把数据分为块(block),然后把这些块分发到DataNode中;

(4)DataNode在NameNode的指导下复制这些块,保持冗余。

2.  Hadoop MapReduce架构

在之前的章节中,学习了MapReduce的基本原理,为了支持这一基本原理的执行,Hadoop项目实现了计算任务的分发、调度、运行、容错等机制。接下来,开始对整个Hadoop MapReduce的架构进行一个深入的了解。

在前面的学习中,已经了解到一个MapReduce作业(job)通常会把输入的数据集切分成若干个独立的数据块,由map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务。

通常,作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

Hadoop MapReduce主要经历了Hadoop 1.x和Hadoop 2.x两个大的架构变化,先来看Hadoop 1.x的架构设计,Hadoop 1.x的架构如图8所示。

e922650e671b7699ace57f74f9431ab7.png

图8     Hadoop 1.x MapReduce架构图

MapReduce 1.x 采用 Master/Slave 架构,其中各个组件的作用如下。

JobTracker:全局唯一,主要负责集群资源监控和作业调度。JobTracker负责监控执行的任务和对失败的任务进行转移,但是JobTracker存在单点故障的问题,一旦JobTracker所在的机器宕机,那么集群就将变得无法正常工作。

TaskTracker:通常部署在DataNode上,负责具体的作业执行工作。TaskTracker需要周期性地向JobTracker汇报本节点的心跳信息。并根据JobTracker发送过来的指令进行相关的数据操作。

客户端:为用户编程提供API接口,同时,将用户编写的MapReduce程序提交到JobTracker中。

Task:在Hadoop中,Task通常分为两种:Map Task和Reduce Task,Map Task执行Map任务,Reduce Task执行Reduce任务。MapReduce的输入被切分为多个数据分片,每个数据分片由一个MapTask执行,这也说明了,输入数据分片的数量决定了Map任务的数量。

由Hadoop 1.x的架构可以看出,Hadoop 1.x MapReduce存在一定的缺陷。

1.可扩展性

  • JobTracker内存中保存用户作业的信息,一旦节点宕机,则用户的数据就会丢失。

  • JobTracker使用的是粗粒度的锁,不利于大规模的高并行计算。

  • 可靠性和可用性

JobTracker失效会导致整个集群不可用,需手动重新提交和恢复MapReduce作业。

3.对不同编程模型的支持

Hadoop1.0 MapReduce不支持大规模的高并行计算,受到其本身框架多方便的局限性导致的。

相反,在 Hadoop 2.x MapReduce 中,解决了上述问题, Hadoop 2.x MapReduce 架构如图 9 所示。

d1239900c122c3ab2b9c680b935734e3.png

图9     Hadoop 2.x MapReduce架构

由图 9 ,可以看出:
  • Hadoop 2.x MapReduce资源管理进程与具体应用程序无关,主要负责整个集群的资源(内存、CPU、磁盘等)管理。

  • 作业控制进程则是直接与应用程序相关的模块,且每个作业控制进程只负责管理一个作业。这样,通过将原有JobTracker中与应用程序相关和无关的模块进行抽象并分离开,不仅大大简化了JobTracker负载,也使得Hadoop支持更多的计算框架。

3.  Hadoop YRAN架构

这里,再说下 Hadoop1.0 MapReduce 的缺点:在 Hadoop 1.0 中, JobTracker 由资源管理和作业控制两部分组成,由于 Hadoop1.0 对 JobTracker 赋予的功能过多而造成负载过重,导致 Hadoop1.0 MapReduce 在可扩展性、资源利用率和多计算框架支持等方面存在不足。另外, Hadoop1.0 中资源管理相关的功能与应用程序相关的功能耦合度过高,造成 Hadoop 难以支持多种计算框架的并存。 正是由于 Hadoop1.0 中存在的这些缺陷,在 Hadoop 2.0 中, YARN 框架诞生了。 Hadoop YARN 架构如图 10 所示。

7959f1649e9045ab88a55557c6a099a1.png

图10         Hadoop 2.x YARN 架构

YARN 将 MapReduce 1.x 中的 JobTracker 拆分成了两个独立的组件:

ResourceManager:全局资源管理器,全局唯一。负责整个集群的资源管理和分配工作。同时,与NodeNanager一起实现管理用户在机器上的进程并对计算进行组织。

NodeManager:集群中的每个节点都运行一个NodeManager进程,负责管理Hadoop集群中的单个计算节点,同时,NodeManager向ResourceManager汇报本节点的各种信息,并且接受来自ApplicationMaster的作业分配信息,同时还会监控Container的内存、CPU等资源的使用情况。

 本文选自于北京大学出版社出版的《海量数据处理与大数据技术实战》节选,略有改动。经出版社授权刊登于此。

fb1d517f002ef68e74527f7caef94461.png

推荐语

1. 热门:涵盖大数据开发领域的常用热门技术和主流框架,包括Hadoop、Hive、Sqoop、Flume、Kafka、Storm、Zookeeper、MySQL、Redis、ActiveMQ等,详细讲解了其基础知识、发展现状和应用前景。

2. 详尽:从基本原理到环境搭建,再到编程案例,完整讲解了大数据离线批处理处理技术和大数据在线实时处理技术。

3. 图解:讲解每种技术框架时都配有大量的框架架构图和执行流程图,并为相关的技术框架配有详细的开发案例。

4. 实用:案例系统分别采用离线批处理计算技术和在线实时计算技术实现,几乎整合了本书中所涉及的所有大数据框架,对此系统案例稍加修改,便可用于实际的项目开发中。

81debe202c3e81cc3d4ba6474e3ef380.gif

0e056ad11c8e3571c33257634b70aa44.png

c64bda65563680cecc6c60718aef9fe7.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值