YARN的简介
MapReduce 1.x
第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。对应Hadoop版本为Hadoop 1.x和0.21.X,0.22.x。
MapReduce 1.x的角色
- Client: 作业提交发起者
- JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业。
- TaskTracker: 保持JobTracker通信,在分配的数据片段上执行MapReduce任务。
- 以上三个就是主要的角色
- 执行流程:
- 客户端提供任务需要执行必须经过JobTracker进行资源管理分配
- JobTracker和TaskTracker是主从结构
- MapReaduce需要回报运行状态,TaskTracker和JobTracker进行回报运行程序,Client将作业提交给JobTracker
- client提交作业到JobTracker,JobTracker有两个功能一个是资源管理和任务分配,TaskTracker会回报资源情况,JobTracker中会存在一个切片清单,通过两个合并的得到那个TaskTracker最适合计算,而JobTracker会将作业分发给TaskTracker来完成,而TaskTracker内部会将具体的任务分发给Task,然后Task任务会将信息再次提交给JobTracker
MapReduce 1.x执行流程
-
提交作业
编写MapReduce程序代码,创建job对象,并进行配置,比如输入和输出路径,压缩格式等,然后通过JobClinet来提交作业。
-
初始化作业
客户端提交完成后,JobTracker会将作业加入队列,然后进行调度,默认的调度方法是FIFO调试方式。
-
分配任务
TaskTracker和JobTracker之间的通信与任务的分配是通过心跳机制完成的。
TaskTracker会主动向JobTracker询问是否有作业要做,如果自己可以做,那么就会申请到作业任务,这个任务可以是MapTask也可能是ReduceTask。
-
执行任务
申请到任务后,TaskTracker会做如下事情:
- 拷贝代码到本地
- 拷贝任务的信息到本地
- 启动JVM运行任务
-
状态与任务的更新
任务在运行过程中,首先会将自己的状态汇报给TaskTracker,然后由TaskTracker汇总告之JobTracker。任务进度是通过计数器来实现的。
-
作业的完成
JobTracker是在接受到最后一个任务运行完成后,才会将任务标记为成功。此时会做删除中间结果等善后处理工作。
YARN的介绍
为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的,针对Hadoop 1.0中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN.
Apache YARN(Yet another Resource Negotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序。
YARN被引入Hadoop2,最初是为了改善MapReduce的实现,但是因为具有足够的通用性,同样可以支持其他的分布式计算模式,比如Spark,Flink等计算框架。
注意:还有一层应用是运行在MapReduce,Spark或者Tez之上的处理框架,如Pig,Hive和Crunch等。