文章目录
yarn简介
yarn是什么?
Yarn是属于hadoop的一个组件,不需要再单独安装,hadoop中已经存在,只需要配置。
Yarn也是一个集群有主节点和从节点。NodeManager提供资源,ResourceManager负责分配资源。
yarn作用?
集群上会运行多个程序,不会把所有资源都分配给一个程序,比如说各个部门的程序都需要运行,也就是说都需要资源,这时候我们就需要一个资源分配和调度程序,帮我们分配资源:cpu,内存,磁盘
yarn思想?
- 将资源管理和作业调度/监控功能划分为单独的进程,其思想是拥有一个全局的RM和每个应用程序的applicationMaster,应用程序可以是单个作业也可以使一组作业。
- RM和NM构成了数据计算框架,RM负责分配资源,NM负责管理每台机器的资源,负责监视容器的资源使用情况。资源有(cpu,memory,disk,network)
- 每个应用程序ApplicationMaster实际上是一个特定的库,他的任务是与RM协商资源,并与NM一起执行和监视任务
yarn配置
- cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml - 配置map-site.xml
<configuration> <!--用于执行mapreduce作业的运行时框架> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- 配置yarn-site.xml
<!--配置resourcemanager的主机--> <property> <name>yarn.resourcemanager.hostname</name> <value>mini1</value> </property> <!--NodeManager上运行的附属服务--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--配置resourcemanager的scheduler的内部通讯地址--> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>mini1:8030</value> </property> <!--配置resoucemanager的资源调度的内部通讯地址--> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>mini1:8031</value> </property> <!--配置resourcemanager的内部通讯地址--> <property> <name>yarn.resourcemanager.address</name> <value>mini1:8032</value> </property> <!--配置resourcemanager的管理员的内部通讯地址--> <property> <name>yarn.resourcemanager.admin.address</name> <value>mini1:8033</value> </property> <!--配置resourcemanager的web ui 的监控页面--> <property> <name>yarn.resourcemanager.webapp.address</name> <value>mini1:8088</value> </property>
- 在resourcemanager机器上配置slaves文件,并将所有的nodemanager写入。
目的在于让RM知道NM有哪些。
yarn启动
对于resourcemanager和nodemanager分别启动/关闭
- Yarn-daemon.sh start/stop resourcemanager
- Yarn-daemon.sh start/stop nodemanager
一起启动/关闭 - start-yarn.sh
- stop-yarn.sh
yarn和MapReduce的关系
Hadoop是google分布式计算框架MapReduce与分布式存储系统GFS的开源实现,由分布式计算框架MapReduce和分布式存储系统HDFS(Hadoop Distributed File System)组成,具有高容错性,高扩展性和编程接口简单等特点,现已被大部分互联网公司采用。即MapReduce是hadoop组成部分,是hadoop生态圈一部分,MapReduce本身也是一个独立的离线计算框架
YARN是Hadoop的一个子项目(与MapReduce并列),是hadoop2.0的一个分支,上面说hadoop由MR和HDFS组成,说的是hadoop1.0版本,它实际上是一个资源统一管理系统,可以在上面运行各种计算框架(包括MapReduce、Spark、Storm、MPI等)。
综上所述:MR需要在yarn上运行。
yarn的工作机制
前提:也可以理解为MRTask提交的全过程 wordCount.jar为事例运行程序
1)client调用job.waitforcompletion方法,目的向Resoucemanager提交MR任务
2)Client向RM提交申请一个应用
3)RM给客户端返回一个job资源的提交路径和任务ID
4)Client 提交jar包,切片信息,配置文件到指定的资源提交路径上
5)Client提交完资源后,通知RM上传完毕
6)RM收到client的请求之后,将要运行的任务加入到调度器中
7)当任务开始计算的时候RM会分配一个相对空闲的节点,创建container,并产生MRappMaster
8)MRappmaster下载client提交的资源到本地
9)MRappMaster向RM申请运行MapTask任务的资源(多个任务)
10)RM将运行maptask的任务分配给空闲的nodemanager,它们领取任务并且创建container
11)RM向接收到maptask任务的nodemanager发送启动maptask任务的脚本,而这两个nodemanager分别启动maptask
12)MRappMaster等待所有maptask任务结束,向RM申请资源,启动reduce task
13)Reduce task启动起来之后,向maptask获取相应分区的数据
14)最后程序运行接收之后,MRappmaster会向RM申请释放资源
对于container的补充
在YARN中,ResourceManager中包含一个插拔式的组件:资源调度器,它负责资源的管理和调度,是YARN中最核心的组件之一。
当向资源调度器申请资源,需向它发送一个ResourceRequest列表,其中,每个ResourceRequest描述了一个资源单元的详细需求,而资源调度器则为之返回分配到的资源描述Container
发出资源请求后,资源调度器并不会立马为它返回满足要求的资源,而需要应用程序的ApplicationMaster不断与ResourceManager通信,探测分配到的资源,并拉去过来使用。一旦分配到资源后,ApplicatioMaster可从资源调度器那获取以Container表示的资源,Container可看做一个可序列化Java对象
一般而言,每个Container可用于运行一个任务。ApplicationMaster收到一个或多个Container后,再次将该Container进一步分配给内部的某个任务,一旦确定该任务后,ApplicationMaster需将该任务运行环境(包含运行命令、环境变量、依赖的外部文件等)连同Container中的资源信息封装到ContainerLaunchContext对象中,进而与对应的NodeManager通信,以启动该任务
MRappMaster和ApplicationMaster
MapReduce的ApplicationMaster,就是MRAppMaster。