前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hadoop|计算框架从MapReduce1.0到Yarn

hadoop|计算框架从MapReduce1.0到Yarn

作者头像
double
发布2018-04-02 16:50:28
1.3K0
发布2018-04-02 16:50:28
举报
文章被收录于专栏:算法channel算法channel

01

HDFS

前面介绍了hadoop的分布式存储框架(HDFS),这个框架解决了大数据存储的问题,这是第一步。知道海量数据如何存储后,脚步不能停留,下一步要设计一个框架,用来玩(计算)这些数据时,资源(计算机集群)该如何调度,比如已知1PB的数据存储在了集群(1000台电脑组成)中的10台计算机(DataNode)中,现在要对这些数据进行Map和Reduce计算,该如何做呢?

在理解以下知识前,需要理解一些知识点。任何应用,比如打开一个word文档,打开QQ,都会占用一定的系统资源(CPU,内存,网络资源等),也就是应用要想正常运行就必须分配给它一定的资源,是谁负责分配给QQ软件资源的,一般都是操作系统内核中的资源调度器。

02

MapReduce1.0计算框架

通俗地讲,首先找到HDFS中的NameNode,因为这个节点可以提供我们1PB的数据都分布存储在哪些计算机中,找到后,直接去这些计算机上进行map和reduce计算就行了。

知道这个基本目标后,理解MapReduce的计算框架就会很简单,因为分布式框架的基本思想一般是Master-Slave模式,所以它也不例外,拿出一个进程作为Master,就是JobTracker,运行和监控MapReduce的Job,负责将Task分配给TaskTracker,TaskTracker是什么?

TaskTracker是一个hadoop计算进程,运行在hadoop集群的DataNode节点上。TaskTracker的主要任务是运行JobTracker分配给它的实际计算任务,如运行Map、Reduce函数,Shuffle过程。TaskTracker任务具体运行在一组slots上,slots的数量可以配置,一般slots的数量会配置成和这台机器的CPU核心数量一致,TaskTracker被分配的task数量决定于当前还有多少个空闲的slots。当TaskTracker收到JobTracker分配的一个Task时,JobTracker会为这个Task单独启动一个jvm进程,也就是说,每个map、reduce任务都会单独运行在一个jvm进程中。TaskTracker在运行task的过程中会向JobTracker发送心跳信息,以此报告给JobTracker自己是否还活着。

当一个client向JobTracker提交任务时,具体过程如下:

  1. client提交任务,JobTracker会接收Job请求;
  2. JobTracker根据Job的输入参数向NameNode请求包含这些文件数据块的DataNode节点列表;
  3. JobTracker确定Job的执行计划:确定执行此job的Map、Reduce的task数量,并且分配这些task到离数据块最近的节点上;
  4. JobTracker提交所有task到每个TaskTracker节点。TaskTracker会定时向JobTracker发送心跳,若一定时间没有收到心跳,JobTracker认为这个TaskTracker节点失败,然后JobTracker会把此节点上的task重新分配到其它节点上;
  5. 一旦所有的task执行完成,JobTracker会更新job状态为完成,若一定数量的task总数执行失败,这个job就会被标记为失败;
  6. JobTracker发送job运行状态信息给Client端,完成闭环。

03

MapReduce1.x的主要缺点

在MapReduce1.x中,JobTracker同时负责job的监控和系统资源的分配;Hadoop架构只支持MapReduce类型的job,所以它不是一个通用的框架,JobTracker和TaskTracker组件是深度耦合的。

根据设计模式中单一职责的原则,在MapReduce2.x,即Yarn中得到了解决,下面看下Yarn框架。

04

MapReduce2.0(Yarn)框架

在Yarn中把job的概念换成了application,因为在新的Hadoop2.x中,运行的应用不只是MapReduce了,还有可能是其它应用如一个DAG(有向无环图Directed Acyclic Graph,例如storm应用),还能很方便的管理诸如Hive、Hbase、Pig、Spark/Shark等应用。

这种新的架构设计能够使得各种类型的应用运行在Hadoop上面,并通过Yarn从系统层面进行统一的管理,各种应用就可以互不干扰的运行在同一个Hadoop系统中,Yarn的地位相当于windows和linux操作系统的地位,这些操作系统的内核管理运行在它上面的各种进程,比如QQ,Chrom浏览器进程。

Yarn如何完成以上功能的?

Yarn,也就是二代MapReduce,主要的思想如下:

The fundamental idea of YARN is to split up the functionalities of resource management and job scheduling/monitoring into separate daemons. The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is either a single job or a DAG of jobs.

把一代MapReduce的JobTracker同时做的两件事(资源调度和Job监控)分开,资源管理交给ResourceManager去做,Job监控交给基于应用(类比于原来一代MapReduce中的Job)的App Master(AM)去做。

下面看下,ResourceManager和Application Master如何实现上述功能的?

4.1 ResourceManager

ResourceManage里头主要包括两个组件:Scheduler 和 ApplicationManager。

4.1.1 Scheduler

Scheduler是一个纯粹的资源调度器,负责协调集群中各个应用的资源分配,保障整个集群的运行效率。

补充:

Yarn中将资源抽象出了一个模型:Container,是Yarn框架的计算单元,是具体执行应用(如map task、reduce task)的基本单位,一个Container就是一组分配的系统资源,比如CPU,内存,磁盘、网络等资源。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。

4.1.2 ApplicationManager

另一个组件ApplicationManager主要负责:

  1. 接收应用的提交请求,为应用分配第一个Container来运行ApplicationMaster,
  2. 负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。

4.2 Application Master

还记得一代MapReduce1.x中,JobTracker负责job的监控。而在MapReduce2中,每个应用的管理、监控交由相应的分布在集群节点NodeManager中的ApplicationMaster,如果某个ApplicationMaster失败,ResourceManager还可以重启它,这大大提高了集群的拓展性。

App master实例是在Container中启动起来的。App Master向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了。

在应用程序运行期间,提交应用的client主动和Application Master交流获得应用的运行状态、进度更新等信息。

4.3 NodeManager

每个节点都会有自己的NodeManager,NodeManager管理这个节点上的资源分配和监控运行节点的健康状态,这是与一代MapReduce不同的地方,一代中统一由JobTracker集中管理。

NodeManager是一个slave服务:它负责接收ResourceManager的资源请求,然后交给Container,相关的应用运行在这个Container中。同时,它还负责监控并报告Container的使用信息给ResourceManager。

Yarn的架构示意图如下,应用(如map,reduce操作等)运行在Container中,NodeManager定时汇报自己的状态给ResourceManager,App master也汇报自己的状态给ResourceManager中的App manager。

05

MapReduce2.0的优势

Yarn框架相对一代的MapReduce有如下的优势,这些都在上文中做过阐述,具体如下:

  • 大大减小了 ResourceManager 的资源消耗,因为有很多任务都分布到NodeManager节点上了;
  • ApplicationMaster 是一个可变更的部分,用户可以定制App master,让更多类型的编程模型能够跑在 Hadoop 集群中;
  • 一代框架中,JobTracker 一个很大的负担就是监控 JobTracker 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,各个App master的运行情况交给ResourceManager 中的组件ApplicationsManager负责监测 ApplicationMaster 的运行状况。
  • Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档