yarn是一款应用资源管理框架.

yarn的构成

一个ResourceManager和多个NodeManager构成了yarn资源管理框架。他们是yarn启动后长期运行的守护进程,来提供核心服务。

ResourceManager(RM)
  • 负责管理整个集群的资源分配,内含scheduler
NodeManager
  • 是每台机器的资源管理者
  • 启动和监视container的资源使用情况
  • 向RM汇报各个Container的运行状态和节点健康状态,并领取相关的Container的命令执行
container

集群上的可使用资源,包含cpu、内存、磁盘、网络等

ApplicationMaster(AM)
  • 与ResourceManager协商资源,
  • 与NodeManager一起执行和监视任务

安装与配置

无序单独安装,安装hadoop时内置.mapred-site.xml配置主要如下

<!--选择yarn作为mapreduce的运行框架-->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!--历史任务的内部通讯地址-->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>mypc01:10020</value>
</property>
<!--历史任务的web监听页面-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>mypc01:19888</value>
</property>

在 yarn-site.xml中的配置如下

在 yarn-site.xml中的配置如下
<!--resourcemanager所在的主机-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>mypc01</value>
</property>
<!--配置yarn的shuffle服务-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value> 
</property>
<!--指定shuffle对应的类 -->
<property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
</property>
<!--配置resourcemanager的scheduler的内部通讯地址-->
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>mypc01:8030</value>
</property>
<!--配置resoucemanager的资源调度的内部通讯地址-->
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>mypc01:8031</value>
</property>
<!--配置resourcemanager的内部通讯地址-->
<property>
    <name>yarn.resourcemanager.address</name>
    <value>mypc01:8032</value>
</property>
<!--配置resourcemanager的管理员的内部通讯地址-->
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>mypc01:8033</value>
</property>
<!--配置resourcemanager的web ui 的监控页面-->
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>mypc01:8088</value>
</property>

启动

start-yarn.sh

log查看

# ls  /usr/local/hadoop/logs

进程查看.如下3388 3485就是yarn相关的进程

[root@mypc01 hadoop]# jps
3045 DataNode
3909 Jps
2950 NameNode
3388 ResourceManager
3485 NodeManager

yarn调度器

调度器是分配资源给container用的.yarn中有三种调度器

1 FIFO调度器

先进先出,将应用放在一个队列中,按照先后顺序运行应用.这个不适合集群,因为不能并行.

2容量调度器

专门留了一部分资源给小任务,可以在执行job1的同时,不会阻塞job2的执行,但是因为这部分资源是一直保留给其他任务的,所以就算只有一个任务,也无法为其分配全部资源.

公平调度器

第一个job启动时,它也是唯一运行的作业,因而获得集群中的所有资源,当第二个(ob启动时,它被分配到集群的一半资源,这样每个作业都能公平共享资源。

位置

可以在yarn-site.xml中配置

位置:$HADOOP_HOME/etc/hadoop/yarn-site.xml
添加配置:
    key: yarn.resourcemanager.scheduler.class
    value: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

yarn命令行

[root@mypc01 hadoop]# which yarn
/usr/local/hadoop/bin/yarn
[root@mypc01 hadoop]# yarn -h
Usage: yarn [--config confdir] COMMAND
where COMMAND is one of:
  resourcemanager -format-state-store   deletes the RMStateStore
  resourcemanager                       run the ResourceManager
                                        Use -format-state-store for deleting the RMStateStore.
                                        Use -remove-application-from-state-store <appId> for
                                            removing application from RMStateStore.
  nodemanager                           run a nodemanager on each slave
  timelineserver                        run the timeline server
  rmadmin                               admin tools
  version                               print the version
  jar <jar>                             run a jar file
  application                           prints application(s)
                                        report/kill application
  applicationattempt                    prints applicationattempt(s)
                                        report
  container                             prints container(s) report
  node                                  prints node report(s)
  queue                                 prints queue information
  logs                                  dump container logs
  classpath                             prints the class path needed to
                                        get the Hadoop jar and the
                                        required libraries
  daemonlog                             get/set the log level for each
                                        daemon
  top                                   run cluster usage tool

job提交流程

  • client向RM申请一个applicationid
  • RM返回一个资源提交路径和application_id.
  • client上传资源,包含job.xml,分片文件,jar包到hdfs上.
  • RM将客户端请求,生成一个task,放入队列
  • 依据Scheduler的分配,会有一台NM领到该任务
  • NM向RM申请资源,RM分配Container给NM
  • NM启动application master,初始化任务
  • NM从hdfs上下载资源,及split分片和计算程序.
  • application master为每一个split创建maptask及reduce task
  • application master为maptask申请container
  • AM与NM沟通,启动maptask任务
  • application master申请container
  • AM与NM沟通 ,启动reducetask任务
  • reduceTask向mapTask拉去区分区数据处理。
  • 全部任务完成后,通知client.