Hadoop-MapReduce与Yarn配置文件

本文介绍了MapReduce的概念、主要功能、优缺点及其在大数据处理中的作用。MapReduce是一种编程模型,适用于大规模数据集的并行运算,具有易编程、良好扩展性和高容错性等优点,但也存在不擅长实时计算、流式计算和DAG计算的缺点。Yarn是Hadoop的资源管理系统,解决了MapReduce1.x的单点故障问题,通过ResourceManager和ApplicationMaster进行资源管理和分配。
摘要由CSDN通过智能技术生成

目录

一、引入

MapReduce是什么

MapReduce主要功能

MapReduce的优势缺陷

优点

缺点

MapReduce的由来与影响

二、MapReduce计算框架

三、MapReduce架构

mapreduce1.x架构

mapreduce2.x架构

四、Yarn 

参考资料


一、引入

MapReduce是什么

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

看得云里雾里的对不对,这里我们结合图解来简单了解下:

MapReduce主要功能

  • 1)数据划分和计算任务调度
    • 系统自动将一个作业(Job)待处理的大数据划分为很多个数据块,每个数据块对应于一个计算任务(Task),并自动调度计算节点来处理相应的数据块。作业和任务调度功能主要负责分配和调度计算节点(Map节点或Reduce节点),同时负责监控这些节点的执行状态,并负责Map节点执行的同步控制。
  • 2)数据/代码互定位
    • 为了减少数据通信,一个基本原则是本地化数据处理,即一个计算节点尽可能处理其本地磁盘上所分布存储的数据,这实现了代码向数据的迁移;当无法进行这种本地化数据处理时,再寻找其他可用节点并将数据从网络上传送给该节点(数据向代码迁移),但将尽可能从数据所在的本地机架上寻 找可用节点以减少通信延迟。
  • 3)系统优化
    • 为了减少数据通信开销,中间结果数据进入Reduce节点前会进行一定的合并处理;一个Reduce节点所处理的数据可能会来自多个 Map节点,为了避免Reduce计算阶段发生数据相关性,Map节点输出的中间结果需使用一定的策略进行适当的划分处理,保证相关性数据发送到同一个 Reduce节点;此外,系统还进行一些计算性能优化处理,如对最慢的计算任务采用多备份执行、选最快完成者作为结果。
  • 4)出错检测和恢复
    • 以低端商用服务器构成的大规模Mapreduce计算集群中,节点硬件(主机、磁盘、内存等)出错和软件出错是常态,因此 MapReduce需要能检测并隔离出错节点,并调度分配新的节点接管出错节点的计算任务。同时,系统还将维护数据存储的可靠性,用多备份冗余存储机制提 高数据存储的可靠性,并能及时检测和恢复出错的数据。

MapReduce的优势缺陷

优点

  • 1)MapReduce易于编程
    • 它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
  • 2)良好的扩展性
    • 当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
  • 3)高容错性
    • MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。
  • 4)适合PB级以上海量数据的离线处理
    • 可以实现上千台服务器集群并发工作,提供数据处理能力。

缺点

  • 1)不擅长实时计算
    • MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。
  • 2)不擅长流式计算
    • 流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。
  • 3)不擅长DAG(有向无环图)计算
    • 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

MapReduce的由来与影响

  • MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。
  • 2003年和2004年,Google公司在国际会议上分别发表了两篇关于Google分布式文件系统和MapReduce的论文,公布了Google的GFS和MapReduce的基本原理和主要设计思想。
  • 2004年,开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting发现MapReduce正是其所需要的解决大规模Web数据处理的重要技术,因而模仿Google MapReduce,基于Java设计开发了一个称为Hadoop的开源MapReduce并行计算框架和系统。自此,Hadoop成为Apache开源组织下最重要的项目,自其推出后很快得到了全球学术界和工业界的普遍关注,并得到推广和普及应用。

MapReduce的推出给大数据并行处理带来了巨大的革命性影响,使其已经成为事实上的大数据处理的工业标准。尽管MapReduce还有很多局限性,但人们普遍公认,MapReduce是到目前最为成功、最广为接受和最易于使用的大数据并行处理技术。MapReduce的发展普及和带来的巨大影响远远超出了发明者和开源社区当初的意料,以至于马里兰大学教授、2010年出版的《Data-Intensive Text Processing with MapReduce》一书的作者Jimmy Lin在书中提出:MapReduce改变了我们组织大规模计算的方式,它代表了第一个有别于冯·诺依曼结构的计算模型,是在集群规模而非单个机器上组织大规模计算的新的抽象模型上的第一个重大突破,是到目前所见到的最为成功的基于大规模计算资源的计算模型。

二、MapReduce计算框架

  • 拆分
    • 首先我们拿到一个文件的时候,我们会把它拆分成一个个Block块,存放在HDFS上,一般为128M,但是因为这个Block块大小是不可变的,也就导致Block块的个数是不可变的,所以我们需要动态调整参与本次运算节点的数量单位。
  • 切片
    • 于是就产生了split这个概念,split可以在不改变原有数据存储的情况下,可以控制参与运算的节点个数。一个切片就对应一个map,一般split的大小是Block大小的整数倍,他俩默认大小相等。
  • 缓存
    • 当Block块被切分好之后,map会从所属的切片中读取数据,每次读取一行到内存中,我们知道内存的大小是很有限的,如果有很多个任务同时执行,可能会导致内存溢出,但是把读到的数据直接存放在磁盘上又会导致整个过程效率低下。所以我们又想出了一个办法,那就是使用环形数据缓存区,也就是map读取到的数据先存放到一块自己专属的内存区,当这个内存区容量达到80%的时候我们就将数据溢写到磁盘,在将数据写到磁盘上的时候这些数据会进行分区,快速排序,此时还有20%的空间可以继续用来存储spilt读取的数据,完美的解决了OOM的问题。溢写之后的数据被存储在多个小的块中,为了方便将来拉取数据,我们会将这些小的块进行一个合并操作,也就是使用归并算法,将这些小的数据块合并为一个大的数据块
  • 拉取
    • 之后我们会进行一个拉取操作,就是磁盘中的相同key的数据会被拉取到同一个reduce节点,但是一个reduce可以拉取多个key,所以reduce中会产生多个小文件。
  • 归并
    • 最后我们将这些小的文件合并为一个大的文件存储到磁盘即可。
       

三、MapReduce架构

mapreduce1.x架构

  • mapreduce1.x介绍
    • mapreduce1.x采用主从模式,由全局唯一的jobTracker和多个taskTracker组成,并且在client中提供多个api供编程使用
  • jobTracker
    • 全局唯一,负责集群的资源监控任务分配调度,jobTracker会对集群中所有的taskTracker进行监控,一旦出现有taskTracker宕机jobTracker会将当前宕机的taskTracker所执行的任务交给其它节点进行处理。当有新的任务进入到集群中,jobTracker会根据资源的使用情况合理的分配这些作业。但是jobTracker存在单点故障问题,一旦jobTracker出现宕机现象,那么整个集群就无法正常工作,这也是mapreduce2.x 所解决的主要问题之一。
  • taskTracker
    • taskTracker使用slot(狭槽)对本节点的资源进行划分,负责具体的作业执行工作。taskTracker负责周期性的向jobTracker发送心跳信息,包括自身运行情况,作业运行情况等,jobTracker会根据心跳信息对其分配一个slot,taskTracker得到slot后会进行后续的工作。
  • client
    • 提供api供用户使用,将mapreduce提交到jobTracker
  • task
    • 分为俩种,maptask和reducetask,分别执行map任务和reduce任务,mapreduce会被切分成多个split,一个split会交给一个maptask区执行,maptask执行后的结果会经过shuffle等阶段被拆分成多个partition,每个partition由一个reducetask去执行。

mapreduce2.x架构

  • yarn将mapreduce1.x中的jobTracker拆分成了俩个独立的组件
    • ResourceManager
      • 资源协调框架的管理者分为主节点和备用节点(防止单点故障)主备的切换基于Zookeeper进行管理时刻与NodeManager保持心跳,接受NodeManager的汇报NodeManager汇报当前节点的资源情况当有外部框架要使用资源的时候直接访问ResourceManager即可如果有MR任务,先去ResourceManager申请资源,ResourceManager根据汇报相对灵活分配资源资源在NodeManager1,NodeManager1要负责开辟资源
    • applicationMaster
      • 全局资源管理器,全局唯一。负责整个集群的资源管理和分配,主要由负责资源调度分配的调度器和负责应用程序提交协商的应用程序管理器组成。
  • 除了将JobTracker切分成两个组件之外,YARN中还有两个重要的组件:
    • nodeManager
      • 集群中的每个节点都运行一个NodeManag进程,NodeManager向ResourceManager汇报本节点的各种信息,并且接受来自ApplicationMaster的作业分配信息。
    • Container
      • 与MapReduce 1.x 中的slot 类似,container是YARN中的资源抽象,对节点的资源,如cpu、内存、磁盘等进行封装。YARN为每一个任务分配一个container去进行执行。container与slot的区别在于,container是可以进行资源的动态划分的,而slot不能改变自身所包含资源的多少。

四、Yarn 

其集群搭建在Hadoop-HDFS详解与HA,完全分布式集群搭建(细到令人发指的教程)已经实现了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值