- hadoop 教程
- 初识 hadoop
- hadoop vs 其它系统
- Hadoop HDFS 文件系统介绍
- hadoop 详细安装步骤
- hadoop 分布式集群安装(1)
- hadoop 安装(2)配置节点 SSH 无密码访问
- hadoop 安装(3)Linux 配置 JDK 环境
- hadoop 安装(4)下载安装配置 hadoop
- hadoop 不同版本区别
- hadoop hdfs 命令行客户端(shell)常用使用命令
- web 界面访问 hadoop hdfs 管理界面
- idea 访问 hadoop hdfs 方法
- idea 搭建 hadoop 开发环境
- java Api 操作 hdfs 文件系统
- MapReduce 介绍
- hadoop 的 Mapreduce 运行机制(一)
- hadoop 的 Mapreduce 运行机制(二)
- Mapreduce 中 Map 任务的运行机制
- Mapreduce 中 reduce 任务的运行机制
hadoop 的 Mapreduce 运行机制(二)
上一章讲解了hadoop1.0当中MapReduce是如何运行的,但是1.0已经被淘汰了,因为原有框架随着集群规模的扩大,就会暴露出很多问题:
1、首先JobTracker是承担的工作量太大,当随着job数量的增加,内存不够,会造成JobTracker死掉的情况。
2、JobTracker存在单点故障问题,这个任务资源调度节点一死,hadoop就无法正常运行。
3、在TaskTracker端,对于资源的分配是通过task的数目作为参考依据,没有考虑节点的CPU、内存等占用情况,如果两个复杂任务同时调用到同一个TaskTracker端,容易出现节点奔溃情况。
针对hadoop1.0当中MapReduce的缺点,hadoop2.0对MapReduce的运行机制进行重构,引入yarn,它是hadoop集群资源管理器系统。下面我们看下hadoop2.0当中MapReduce是如何运行的,看下官方的流程图一个一个步骤分析:
名词解析
1、client node:客户端节点,编写Mapreduce程序,并提交程序代码给hadoop。
2、resouce manage node:yarn资源管理器,负责hadoop集群上计算资源的协调。
3、node manage node :yarn节点管理器,负责启动和监控集群中机器上的计算容器(container)
4、MRAppMaster:负责协调运行mapreduce的作业.
5、hdfs:hadoop的分布式文件系统
1.1作业的提交
1、客户端client运行Mapreduce程序,如步骤1。
2、会向yarn资源管理器节点申请一个用于执行Mapreduce的作业ID,如步骤2。
3、然后hadoop会根据作业的输入分片的大小、运行作业的JAR、配置文件等资源以作业ID命名的临时共享目录,保存在HDFS文件系统上,如步骤3.
4、通过yarn资源管理器的submit方法提交作业。如步骤4
1.2、作业的初始化
1、提交完作业,yarn资源管理器就会在节点管理器上分配一个容器(container),用于启动MRAppMaster进程,如步骤5。该进程主要负责协调运行mapreduce的作业,主要监控作业节点的map和reduce的运行状态。并在启动的时候就向yarn资源管理器注册并报告自己的信息。
2、MRAppMaster利用hdfs当中任务ID存储的临时共享目录中的信息对每一个分片创建一个map对象,并通过参数确定reduce的数量,以及确定最终输出的目录和任务输出的临时工作空间。如步骤6。
1.3、作业任务的分配
1、初始化任务完成后,MRAppMaster会向yarn资源管理器申请进行map和reduce任务的资源节点。如步骤8
2、首先是先map任务发出资源申请,直到map任务完成超过5%时,才会为reduce任务申请资源。
3、reduce任务的分配可以分配到各个datanode节点运行,但是map执行时,会优先考虑符合map任务的本地数据节点,减少跨数据节点进行map操作。
1.4、作业任务的执行
1、MRAppMaster提交申请后,资源管理器为其按需分配资源节点,MRAppMaster就与yarn节点管理器通信来启动容器,如步骤9。
2、该任务由主类YarnChild的一个java应用程序执行。如步骤11。
3、在运行任务之前,会从HDFS的临时共享目录上进行所需资源的本地化。如步骤10。
4、接下来就是运行map和reduce任务。
1.5、作业的完成
当MRAppMaster收到最后一个任务已完成的通知,便把作业的状态设置为成功,并告知yarn资源管理器。
hadoop2.0中Mapreduce优点
1、对比hadoop1.0解决了单点故障问题。由于每一个Mapreduce任务都会生成一个AppMaster进行调度。从而使单点故障不会影响到其它的任务进行。
2、解决了单点压力过大问题,hadoop1.0的压力都在jobtracker身上,现在交于AppMaster进行调度,只有在有任务时,才会启动一个AppMaster,每一个AppMaster都是由集群中资源较为充足的结点进行启动,分散压力,起到负载均衡的作用。
3、完成了任务调度与资源调度的解耦,yarn只做资源调的管理器。任务调用全部交于AppMaster。也为其它计算框架接入hadoop提供了可能性。只需继承AppMaster。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。