vlambda博客
学习文章列表

通俗易懂的Spark基础之MapReduce和Hadoop


Spark前期基础预习



00

导语


在开始学习Spark之前,我们将先对相关的基础做一下简单的了解,包括MapReduce和Hadoop、YARN资源管理调度、Spark数据处理场景。感兴趣的同学,一起交流学习。



参考课程

本文系列内容来自拉钩教育【即学即用的Spark实战44讲】课程,本人学习总结https://kaiwu.lagou.com/course/courseInfo.htm?courseId=71文章中的图大部分均来源于课程。



第01讲


MapReduce:计算框架和编程模型 



起源:Google三驾马车



计算机科学包括人工智能、编程语言、系统以及理论,在系统领域有两大重要会议,一个是ODSI(USENIX conference on Operating Systems Design and Implementation),另一个是SOSP(ACM Symposium on Operating Systems Principles),这两个会议在业界享有很高的声誉。


Google从03年到06年在这两个会议上发表了三篇重要的论文,引起了业界在分布式系统的广泛讨论,并为Hadoop、HBase、Spark 等很快走上台前奠定了扎实的基础,大数据技术开始呈现出一个百花齐放的状态。

  1. SOSP2003:The Google File System (讨论分布式文件系统)

  2. ODSI2004:MapReduce: Simplifed Data Processing on Large Clusters (讨论分布式计算框架)

  3. ODSI2006:Bigtable: A Distributed Storage System for Structured Data(开始揭开分布式的神秘面纱)




MapReduce



MapReduce有两个含义

  1. 一般来说,在说到计算框架时,我们指的是开源社区的MapReduce计算框架,但随着新一代计算框架如Spark、Flink的崛起,开源社区的MapReduce计算框架在生产环境中使用得越来越少,主见退出舞台。

  2. 第二个含义是一种编程模型,这种编程模型来源于古老的函数式编程思想,在 Lisp 等比较老的语言中也有相应的实现,并随着计算机 CPU 单核性能以及核心数量的飞速提升在分布式计算中焕发出新的生机。


MapReduce 模型将数据处理方式抽象为mapreduce,其中map也叫映射,顾名思义,它表现的是数据的一对一映射,通常完成数据转换的工作。reduce被称为归约,它表示另外一种映射方式,通常完成聚合的工作,如下图所示:



通俗易懂的Spark基础之MapReduce和Hadoop


圆角框可以看成是一个集合,里面的方框可以看成某条要处理的数据,箭头表示映射的方式和要执行的自定义函数,运用MapReduce编程思想,我们可以实现以下内容:

  1. 将数据集(输入数据)抽象成集合;

  2. 将数据处理过程用map与reduce进行表示;

  3. 在自定义函数中实现自己的逻辑。




并发和并行



Map和Reduce的自定义组合,在业务中的表现力是非常强的,下图举一个例子。

map端的用户自定义函数与map算子对原始数据人名进行了转换,生成了组标签:性别,reduce端的自定义函数与reduce算子对数据按照标签进行了聚合(汇总)。


通俗易懂的Spark基础之MapReduce和Hadoop


MapReduce认为,再复杂的数据处理流程也无非是这两种映射方式的组合,例如map+map+reduce,或者reduce后面接map,等等,我们举个稍微复杂的例子。


通俗易懂的Spark基础之MapReduce和Hadoop


现在,我们可以很容易的将第一个圆角方框想象成一个数十条数据的集合,它是内存中的集合变量,那么要实现上图中的变换,对于计算机来说,难度并不大,就算数据量再大些,我们也可以考虑将不同方框和计算流程交给同一台计算机的 CPU 不同的核心进行计算,这就是我们说的并行和并发。


当数据量的急剧扩大,背后工程实现的复杂度会成倍增加,当整个数据集的容量和计算量达到1台计算机能处理的极限的时候,我们就会想办法把图中方框所代表的数据集分别交给不同的计算机来完成,那么如何调度计算机,如何实现reduce过程中不同计算机之间的数据传输等问题,就是Spark基于MapReduce编程模型的分布式实现,这也是我们常常所说的分布式计算。




第02讲


Hadoop:集群的操作系统



Hadoop



Hadoop的出现,对于坐拥数据而苦于无法分析的用户来说,无疑是久旱逢甘霖,加之那段时间移动互联网的流行,数据呈几何倍数增长,Hadoop在很大程度上解决了数据处理的痛点。在很长的一段时间里,Hadoop是大数据处理的事实标准,直到现在,很多公司的大数据处理架构也是围绕Hadoop而建的。




Hadoop 1.0与2.0



Hadoop从问世至今一共经历了3个大版本,分别是1.0、2.0与最新的3.0,其中最有代表性的是1.0与2.0,3.0相比于2.0变化不大。Hadoop1.0的架构也比较简单,基本就是按照论文中的框架实现,其架构如下图所示。


通俗易懂的Spark基础之MapReduce和Hadoop


其中,下层是 GFS 的开源实现 HDFS(Hadoop 分布式文件系统),上层则是分布式计算框架MapReduce,这样一来,分布式计算框架基于分布式文件系统,看似非常合理。但是,在使用的过程中,这个架构还是会出现不少问题,主要有 3 点:主节点可靠性差,没有热备;提交MapReduce作业过多的情况下,调度将成为整个分布式计算的瓶颈资源利用率低,并且不能支持其他类型的分布式计算框架


基于这些问题,社区开始着手Hadoop2.0的开发,Hadoop2.0最大的改动就是引入了资源管理与调度系统YARN(Yet Another Resource Negotiator),代替了原有的计算框架,而计算框架则变成了类似于YARN的用户,如下图:


通俗易懂的Spark基础之MapReduce和Hadoop


YARN将集群内的所有计算资源抽象成一个资源池,资源池的维度有两个:CPU和内存。同样是基于HDFS,我们可以认为YARN管理计算资源HDFS管理存储资源。上层的计算框架地位也大大降低,变成了YARN的一个用户,另外,YARN 采取了双层调度的设计,大大减轻了调度器的负担。


Hadoop 2.0 基本上改进了 Hadoop 的重大缺陷,此外 YARN 可以兼容多个计算框架,如 Spark、Storm、MapReduce 等,HDFS 也变成了很多系统底层存储,Hadoop以一种兼收并蓄的态度网罗了一大批大数据开源技术组件,逐渐形成了一个庞大的生态圈,如下图所示(该图只展示了一部分组件)。在当时,如果你要想搭建一个大数据平台,绝对无法绕过 Hadoop。


通俗易懂的Spark基础之MapReduce和Hadoop





Hadoop大数据平台



当提及大数据平台的时候,我们要知道它首先是一个分布式系统,换句话说是由一组计算机构成的集群。所谓大数据平台,相当于把这个集群抽象成一台计算机,而底层的细节涉及不为人知,让用户使用这个平台时,像是在使用一台计算机,不会感觉到自己在使用一个分布式系统。


hadoop dfs -ls /ls /


第一条命令是浏览Hadoop文件系统(HDFS)的根目录,第二条命令是浏览 Linux本地文件系统的根目录,两条命令很像,没有很大的区别,也就是说Hadoop为用户提供了一套类似Liunx的环境,我们会用Linux的简单命令,也就会对Hadoop进行简单的操作,上手很快的。


因此,Hadoop可以理解为是一个计算机集群的操作系统,而SparkMapReduce 只是这个操作系统支持的编程语言而已,HDFS 是基于所有计算机文件系统之上的文件系统抽象。同理,YARN是基于所有计算机资源管理与调度系统之上的资源管理与调度系统抽象,Hadoop是基于所有计算机的操作系统之上的操作系统抽象。所以如果你一定要进行比较的话,Hadoop应该和操作系统相比较




第03讲


如何设计与实现统一资源管理与调度系统




统一资源管理与调度系统的设计



YARN的全称是 Yet Another Resource Negotiator,直译过来是:另一种资源协调者,但是它的标准名称是统一资源管理与调度系统,主要包含3个词:统一资源管理调度。YARN的资源管理有CPU和内存,下面我们谈一谈调度。


目前的宏观调度机制一共有3种:集中式调度器(Monolithic Scheduler)双层调度器(Two-Level Scheduler)状态共享调度器(Shared-State Scheduler)


  1. 集中式调度器全局只有一个中央调度器,计算框架的资源申请全部提交给中央调度器来满足,所有的调度逻辑都由中央调度器来实现,在高并发作业的情况下,容易出现性能瓶颈。

  2. 双层调度器将整个调度工作划分为两层:中央调度器和框架调度器。中央调度器管理集群中所有资源的状态,它拥有集群所有的资源信息,按照一定策略将资源粗粒度地分配给框架调度器,各个框架调度器收到资源后再根据应用申请细粒度将资源分配给容器执行具体的计算任务。在这种双层架构中,每个框架调度器看不到整个集群的资源,只能看到中央调度器给自己的资源。

  3. 状态共享式调度大大弱化了中央调度器,它只需保存一份集群使用信息,就是图中间的蓝色方块,取而代之的是各个框架调度器,每个调度器都能获取集群的全部信息。





YARN



简单来看看YARN的架构图,YARN的架构是典型的主从架构,主节点是 ResourceManger,也是我们前面说的主调度器,所有的资源的空闲和使用情况都由ResourceManager管理。ResourceManager也负责监控任务的执行,从节点是NodeManager,主要负责管理Container生命周期,监控资源使用情况等 ,Container是YARN的资源表示模型,Task是计算框架的计算任务,会运行在Container中,ApplicationMaster可以暂时认为是二级调度器,比较特殊的是它同样运行在Container中


通俗易懂的Spark基础之MapReduce和Hadoop


面试题哦:YARN 启动一个 MapReduce 作业的流程,如图所示:


通俗易懂的Spark基础之MapReduce和Hadoop


第 1 步:客户端向 ResourceManager 提交自己的应用,这里的应用就是指 MapReduce 作业

第 2 步:ResourceManager 向 NodeManager 发出指令,为该应用启动第一个 Container,并在其中启动 ApplicationMaster。

第 3 步:ApplicationMaster 向 ResourceManager 注册

第 4 步:ApplicationMaster 采用轮询的方式向 ResourceManager 的 YARN Scheduler 申领资源

第 5 步:当 ApplicationMaster 申领到资源后(其实是获取到了空闲节点的信息),便会与对应 NodeManager 通信,请求启动计算任务

第 6 步:NodeManager 会根据资源量大小、所需的运行环境,在 Container 中启动任务

第 7 步:各个任务向 ApplicationMaster 汇报自己的状态和进度,以便让 ApplicationMaster 掌握各个任务的执行情况

第 8 步:应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。



第04讲


解析Spark数据处理与分析场景



Spark应用场景



技术要在特定的场景下才能发挥作用,那么在数据科学与数据工程中,有哪些场景呢,下面来看看这张图,图中根据作业类型、需求确定性、结果响应时间将应用场景分为三大类,大概有所了解就可以。


通俗易懂的Spark基础之MapReduce和Hadoop





第05讲


Spark编程语言选择及部署


【即学即用的Spark实战系列】---下一篇将介绍Spark的编程语言和环境部署,并手把手搭建环境,书写Spark的Hello world,一起学习。



AINLP与知识图谱旨在深度学习、自然语言处理、知识图谱、搜索推荐、大数据、相关竞赛等技术分享与解读。


你和我成长的加油站


成长的旅途是孤独,也是人生



分享一点,幸运多多,点击 在看 !

↘↘↘