hadoop的MRv1
- JobTracker
- 接收client端提交的任务;
- 分配任务给TaskTracker;
- 监控TaskTracher;
- TaskTracher
- 执行JobTracher分配给自己的任务
- 缺点:
- 计算资源和计算模型的管理调度耦合。即JobTracker自己资源调度、并监控管理TaskTracker
- 集群的资源受jobTracker的能力限制
- 不是一个通用框架,只是针对hadoop的mr
hadoop的MRv2(on yarn)
- 当启动yarn时,会在制定的节点存在resourceManager进程,在每个slaves的配置文件中配置的节点上存在nodeManager进程。
- resourceManager(Ha通过zookeeper )负责任务接收和调度:
- 任务接收;applicationManager。当client提交applicationMaster给rm时,applicationManager进行任务接收,并分配一个container给这个applicationMaster,之后管理该applicationMaster,进行失败重启等。
- 任务调度;Scheduler。nodeManager会定期向rm汇报每个nodeManager的资源情况。当applicationMaster向rm询问执行task的资源时,Scheduler负责调度。
- nodeManager会负责向管理本地资源并向rm汇报本地资源使用情况;分布式的存在applicationMaster,执行任务task。
- 管理本地资源;container,是一个管理本地资源的简单服务,每个container将来会执行一个task。
- applicationMaster分布式的存在am;am会向rm告知自己的资源情况向nodeManager申请使用container资源,NodeManager给他container使用来执行task,之后application监控自己执行task的container。
例如有一个application(即一个job提交,该job有2task),执行顺序如下:
1.当applicationMaster(AM)提交时,ApplicationManager为他分配container3,之后applicationManager负责管理AM,负责applicationMaster的失败重启等操作。
2.然后AM向ResourceManager询问那些NodeManager有可用资源,得到回复nm1的ct1、nm3的ct6,之后rm就不管了。注:rm之所以知道有哪些资源能用是因为nm会定期向他报告内部使用情况。
3.然后向NodeManager申请资源,并分配资源给他们使用,这样AM的两个task就在Container1、Contailer6上执行了。之后由AM监控两个容器中task执行情况。
这样:
1.ApplicationMaster是分布式的
2.yarn是一个通用框架,不仅hadoop能用,spark等也可以直接使用yarn。
yarn的配置文件如下:
扫描二维码关注公众号,回复:
2331558 查看本文章
yarn-site.xml
<configuration>
<!-- Site specific YARNconfiguration properties -->
<!-- 开启RM高可靠-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的clusterid -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>focuson2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>focuson3</value>
</property>
<!-- 指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>focuson1:2181,focuson2:2181,focuson3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>