yarn(Yet Another Resource Negotiator)

hadoop的MRv1

  • JobTracker
  1. 接收client端提交的任务;
  2. 分配任务给TaskTracker;
  3. 监控TaskTracher;
  • TaskTracher
  1. 执行JobTracher分配给自己的任务
  • 缺点:
  1. 计算资源和计算模型的管理调度耦合。即JobTracker自己资源调度、并监控管理TaskTracker
  2. 集群的资源受jobTracker的能力限制
  3. 不是一个通用框架,只是针对hadoop的mr

hadoop的MRv2(on yarn)

  • 当启动yarn时,会在制定的节点存在resourceManager进程,在每个slaves的配置文件中配置的节点上存在nodeManager进程。
  • resourceManager(Ha通过zookeeper )负责任务接收和调度:
  1. 任务接收;applicationManager。当client提交applicationMaster给rm时,applicationManager进行任务接收,并分配一个container给这个applicationMaster,之后管理该applicationMaster,进行失败重启等。
  2. 任务调度;Scheduler。nodeManager会定期向rm汇报每个nodeManager的资源情况。当applicationMaster向rm询问执行task的资源时,Scheduler负责调度。
  • nodeManager会负责向管理本地资源并向rm汇报本地资源使用情况;分布式的存在applicationMaster,执行任务task。
  1. 管理本地资源;container,是一个管理本地资源的简单服务,每个container将来会执行一个task。
  2. 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>



猜你喜欢

转载自blog.csdn.net/focuson_/article/details/80289542