分享

Hadoop2.x 让你真正明白yarn

问题导读

1.hadoop1.x中mapreduce框架与yarn有什么共同点?
2.它们有什么不同点?
3.yarn中有哪些改变?
4.yarn中有哪些术语?




原文:about云日志分析项目准备6-3-1:Hadoop2.x 让你真正明白yarn
http://www.aboutyun.com/forum.php?mod=viewthread&tid=20888

yarn.png
yarn是比较难懂的一个地方,也是很重要的一个组件,不止hadoop使用yarn,spark,storm也可以使用yarn。因此yarn的理解是非常重要的。如果刚开始学习,其实还是挺难懂的。因为很多的概念比较抽象。
如果一时理解不了,也是正常的,这时候就需要我们不断的接触和思考,不断的找资料,强化,通过时间,慢慢就能熟记并且理解。下面是个人总结,希望对大家有所帮助。


相同点
hadoop2.x的发展是由于hadoop1.x的问题造成的。
那么是什么问题造成的。比较流行的说法是jobtracker的问题,比如单点故障,任务过重。我们知道了除了Jobtracker,同时还有一个TaskTracker。我们看下图:



上图中,有一个JobTracker,多个TaskTracker。

Yarn比较

我们在来看yarn



我们看到有一个ResourceManager,多个NodeManager。
也就是说hadoop1.x mapreduce框架与hadoop2.x yarn,他们的框架相同之处,都是分布式的。
再次总结相同处:
JobTracker一个,TaskTracker多个
resourceManager一个,NodeManager多个

不同点
既然他们框架结构是相同的,那么到底是什么原因,淘汰JobTracker机制。
这时候我们就需要看看JobTracker到底干了哪些事情。





再看上图:JobTacker概述
JobTacker其承担的任务有:接受任务、计算资源、分配资源、与DataNode进行交流。
在hadoop中每个应用程序被表示成一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块则负责作业的分解和状态监控。
*最重要的是状态监控:主要包括TaskTracker状态监控、作业状态监控和任务状态监控。主要作用:容错和为任务调度提供决策依据。
TaskTracker概述
TaskTracker是JobTracker和Task之间的桥梁:一方面,从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等;另一方面,将本地节点上各个任务的状态通过心跳周期性汇报给JobTracker。TaskTracker与JobTracker和Task之间采用了RPC协议进行通信

TaskTracker的功能:
1.汇报心跳:Tracker周期性将所有节点上各种信息通过心跳机制汇报给JobTracker。这些信息包括两部分:
*机器级别信息:节点健康情况、资源使用情况等。
*任务级别信息:任务执行进度、任务运行状态等。
2.执行命令:JobTracker会给TaskTracker下达各种命令,主要包括:启动任务(LaunchTaskAction)、提交任务(CommitTaskAction)、杀死任务(KillTaskAction)、杀死作业(KillJobAction)和重新初始化(TaskTrackerReinitAction)。

资源slot概述
slot不是CPU的Core,也不是memory chip,它是一个逻辑概念,一个节点的slot的数量用来表示某个节点的资源的容量或者说是能力的大小,因而slot是 Hadoop的资源单位。

hadoop中什么是slots
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7562



yarn详解

Yarn的基本思想是拆分资源管理的功能,作业调度/监控到单独的守护进程
这里面出现了很多名词:
ResourceManager,NodeManager,ApplicationMaster,Container,同样下面亦是yarn结构图。
ResourceManager是全局的,负责对于系统中的所有资源有最高的支配权。
ApplicationMaster 每一个job有一个ApplicationMaster 。
NodeManager,NodeManager是基本的计算框架。
NodeManager 是客户端框架负责 containers, 监控他们的资源使用 (cpu, 内存, 磁盘, 网络) 和上报给 ResourceManager/Scheduler.
ApplicationMaster首先它是一个框架库,它的功能官网说的不够系统,大意,由于NodeManager 执行和监控任务需要资源,所以通过ApplicationMaster与ResourceManager沟通,获取资源。换句话说,ApplicationMaster起着中间人的作用。
转换为更专业的术语:AM负责向ResourceManager索要NodeManager执行任务所需要的资源容器,更具体来讲是ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控。

ResourceManager有两个组件:调度器和应用程序管理器。
调度器(Scheduler)是可插拔的,比如有Fair Scheduler、Capacity Scheduler等,当然调度器也可以自定义。
更多相关内容:
Hadoop YARN配置参数剖析(4)—Fair Scheduler、Capacity Scheduler相关参数
http://www.aboutyun.com/forum.php?mod=viewthread&tid=5864

应用程序管理器
负责接收提交的任务,指定ApplicationMaster申请资源(container) ,协调并提供在ApplicationMaster容器失败时的重启功能。


而下图也是官网提供内容,大家可以参考下。


总结
为了更好的理解,我们就需要跟hadoop1.x比较:
为何要使用yarn。
我们看到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager:
比如监控功能,分给了NodeManager,和Application Master。
ResourceManager里面又分为了两个组件:调度器及应用程序管理器。
也就是说Yarn重构后,JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减轻了单点故障,及压力。

同时我们还看到Yarn使用了Container,而hadoop1.x中使用了slot。slot存在的缺点比如只能map或则reduce用。Container则不存在这个问题。这也是Yarn的进步。


参考资源:
hadoop入门:第六章YARN文档概述
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17338
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html
http://www.2cto.com/kf/201311/260826.html










本帖被以下淘专辑推荐:

已有(26)人评论

跳转到指定楼层
空空未空 发表于 2017-2-3 08:56:49
很好的文章
回复

使用道具 举报

kingsman 发表于 2017-2-3 14:31:22
必须给版主12个好评!
回复

使用道具 举报

蓝月狼 发表于 2017-2-8 14:55:46
多谢分享,这个之前在官网上也看过下,不过官网确实写得模糊,不过有个细节我还是想问下,am按官网上的描述,是针对一个job一个am的,但是没有详细描述am处在NodeManager的节点上,还是在在resourcemanager的节点上,按那个图看应该是在nodemanager上,而且另外一点,他会怎么指定哪个nodemanager指定为某个am的所在。
另外一点关于container也比较模糊的,按之前一些官方提到的图来看,am向resourcemanager申请资源,而这个时候Scheduler会分配指定的节点上的资源生成对应的nodemanager节点上的container,但是这里有个就是,在yarn-site.xml和mapred-site.xml之中,关于这两个资源的配置的对应关系,因为之前我想缩小他们之间占用的内存资源,但是配置起来一直有问题。所以想讨论下这个。  
多谢版主之前的那些文章分享。
回复

使用道具 举报

tntzbzc 发表于 2017-2-8 16:09:05
蓝月狼 发表于 2017-2-8 14:55
多谢分享,这个之前在官网上也看过下,不过官网确实写得模糊,不过有个细节我还是想问下,am按官网上的描述 ...

am按官网上的描述,是针对一个job一个am的,但是没有详细描述am处在NodeManager的节点上,还是在在resourcemanager的节点上,按那个图看应该是在nodemanager上,而且另外一点,他会怎么指定哪个nodemanager指定为某个am的所在。【这个需要根据配置信息,如果说某个客户端比较清闲,可能会被分配am,如果客户端内存已经爆满,不可能被分配,即使分配了,也会造成死机。所以hadoop不会这么干的。
另外一点关于container也比较模糊的,按之前一些官方提到的图来看,am向resourcemanager申请资源,而这个时候Scheduler会分配指定的节点上的资源生成对应的nodemanager节点上的container,但是这里有个就是,在yarn-site.xml和mapred-site.xml之中,关于这两个资源的配置的对应关系,因为之前我想缩小他们之间占用的内存资源,但是配置起来一直有问题。所以想讨论下这个。
yarn与mapreduce就像池子与水的关系。yarn的内存原则上应该大于或则等于mapreduce运行所需内存。如果小于的话,肯定会溢出。 整体来说应该是这样的,如果还有问题,可以相互讨论

回复

使用道具 举报

蓝月狼 发表于 2017-2-8 16:33:53
tntzbzc 发表于 2017-2-8 16:09
am按官网上的描述,是针对一个job一个am的,但是没有详细描述am处在NodeManager的节点上,还是在在resour ...

多谢你的回复,
第一个问题,我理解你的意思,不过有个问题就是,万一在分配之后,那个存在am的nodemanager的节点被列入黑名单或者网络断开了。那么对应的Job不就失去了管理者了么?
第二个问题是,因为电脑上的内存比较小,于是我想把每个task的内存限制小点。= = 不过貌似不怎么成功,因为那个时候对那个的了解不是很深入。你有试过这个调整么
回复

使用道具 举报

tntzbzc 发表于 2017-2-8 16:44:55
蓝月狼 发表于 2017-2-8 16:33
多谢你的回复,
第一个问题,我理解你的意思,不过有个问题就是,万一在分配之后,那个存在am的nodemana ...

第一个问题,hadoop应该都考虑了
第二个问题,内存不能过小,否则会撑爆,导致复杂运算或则数据量一大,就产生问题。我以前遇到过,由于内存过小导致distinct,或则条件查询一运行就报错。
回复

使用道具 举报

蓝月狼 发表于 2017-2-8 17:16:25
tntzbzc 发表于 2017-2-8 16:44
第一个问题,hadoop应该都考虑了
第二个问题,内存不能过小,否则会撑爆,导致复杂运算或则数据量一大, ...

嗯,第一个问题其实我想问的是你知道hadoop关于这个的处理机制么。
第二个问题是因为我暂时不会做太大量内存的操作,所以想节省内存控件,所以才想控制下的。
回复

使用道具 举报

einhep 发表于 2017-2-9 19:46:45
蓝月狼 发表于 2017-2-8 17:16
嗯,第一个问题其实我想问的是你知道hadoop关于这个的处理机制么。
第二个问题是因为我暂时不会做太大量 ...

这个没有的,即使官网也没的。只能看源码
回复

使用道具 举报

美丽天空 发表于 2017-2-12 23:05:05
很好的文章,感谢分享
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条