YARN分布式资源管理系统
组成:
ResourceManager:YARN的资源管理器,主节点,通过NodeManager管理集群中所有的资源
NodeManager:YARN的节点管理器,从节点,通过container管理资源,一个dataNode对应一个NodeManager
Container:包装资源,CPU/内存/IO
容器:最小的资源单位,1GB内存,一个虚拟核心
Master:协调MapReduce作业中任务的运行
Application Master和MapReduce任务运行于容器中,这些容器由ResourceManager调度,由nodemanager管理
yarn工作流程
1.client端向ResourceManager提交应用程序, 也就是client端会将 jar包,配置文件,切片等数据上传到hdfs上的某路径下;
2. resourceManager将此应用程序添加到任务队列中;
3. 等待资源充沛时, resourceManager为该应用程序分配第一个container,在这个container中启动应用程序的ApplicationMaster;
4. ApplicationMaster首先向ResourceManager注册,用户可以直接通过ResourceManager查看应用程序的运行状态, 还会进行分片等工作, 之后向ResourceManager申请运行任务所需的资源;
5. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源, 发送命令让NodeManager创建container, 之后执行task;
6. ApplicationMaster监控job执行作业, 必要时候进行容错处理, 直到ApplicationMaster检测到job完成后, 向ResourceManager通知, 注销自己
作业提交流程
1.取号,向resourcemanager申请一个新的application ID,用于MapReduce作业的ID
2.检查作业的输出,如果没有指定输出或者路径已经存在(路径存在时会覆盖),则不提交作业,并且抛出异常
3.检查作业的输入并计算输入切片,如果不能计算切片(如:输入路径不存在等),不提交作业,抛出异常
4.拷贝jar包,配置文件,计算好的切片到共享文件系统的以作业ID命名的目录中,作业的jar包默认副本数量为10,nademanager如果运行作业中的任务时,会有很多副本可以访问
5.调用resourcemanager的submitApplication方法提交作业
6.resourcemanager挑选一台NodeManager,该NodeManager分配容器(Container)并在此容器上启动application master进程,读取客户端上传的资源,并计算需要多少map任务和reduce任务,向resourceManager为map任务申请资源
reduce任务可以运行于集群中的任意位置,而map任务会有本地读取数据的限制。
7.当map任务的完成度达到百分之五的时候,再向resourceManager为reduce任务申请资源
8.所有的reduce任务运行完成之后,MRAppMaster会通知客户端作业完成。