yarn一个基本理念就是将JobTracker的两大主要功能——资源管理和作业调度/监控——分割开来成为两个独立的守护进程。在这个方案里,有一个全局的ResourceManager (RM)和对应每个应用的ApplicationMaster (AM)。一个应用可以是一个独立作业,也可以是多个作业构成的DAG(有向无环图,Directed Acyclic Graph)。 ResourceManager和NodeManager(NM)一起构成了整个数据计算框架。ResourceManager是系统上全部应用所需资源的最终决策者。NodeManager则是每台机器上的框架代理,负责这台机器上的所有容器。NodeManager监控一台机器上的所有容器对资源(CPU、内存、硬盘、网络)的使用,并将之上报给ResourceManager和Scheduler。 每个应用的ApplicationMaster实际上是一个具体的框架库。它的任务是负责与ResourceManager协商获取资源,以及与NodeManager合作实现task的执行与监控。 ResourceManager有两个主要组件:Scheduler(调度器)和ApplicationManager。 Scheduler根据容量、队列等常见的约束,将系统资源分配给正在运行的各种应用。这里的Scheduler是一个纯粹意义上的调度器:它不再对应用的状态进行监控和跟踪,也不保证重启因应用错误或硬件故障导致失败的任务。Scheduler基于应用对资源的需求执行调度功能。这是基于一个抽象的概念“资源容器(Container)”实现的。资源容器将内存、CPU、硬盘和网络等元素组合在一起支持对任务的资源分配。 Scheduler支持一种插件策略,可以将集群中资源分配给多个队列和应用。当前的Scheduler,如Capacity Scheduler和Fair Scheduler,均可视为该策略的实现。 CapacityScheduler支持hierarchical queues(分层队列),这为更准确的集群资源共享提供了可能。 Container中封装了机器资源,如内存,CPU, 磁盘,网络等,每个任务会被分配一个容器,该任务只能在该容器中执行,并使用该容器封装的资源。 ApplicationsManager负责接收作业提交,将应用程序分配给具体的ApplicationMaster,并负责重启失败的ApplicationMaster。每个应用的ApplicationMaster负责和Scheduler谈判获取资源容器,并跟踪资源容器的状态监控他们的进程。 MRv2为历史稳定版本(hadoop-1.x)提供了兼容API (API compatibility )。这意味着所有MapReduce作业不需要更改,只要重新编译一次就仍可以在MRv2上运行。
[阅读更多...]-
Yarn架构设计
-
Yarn命令
概述 yarn命令是调用的bin/yarn脚本。执行yarn命令时如果不带上参数信息则会打印yarn命令的帮助信息。 yarn命令的用法: yarn有一个命令参数解析框架,可以用来解析通用命令参数以及运行类。命令参数及描述如下表: –config confdir 覆盖默认配置目录,默认配置目录为: ${HADOOP_PREFIX}/conf。 –loglevel loglevel 覆盖默认日志级别,可选的日志级别为:FATAL,ERROR,WARN,INFO,DEBUG,以及TRACE,默认日志级别为INFO。 GENERIC_OPTIONS(通用命令参数) 一套在多种命令里面都可能会用到参数项,具体见通用命令项表 COMMAND COMMAND_OPTIONS 各种命令以及其参数,接下来主要讲述的内容。大致可以分为普通用户命令和系统管理员命令两大类。 通用项列表: 命令选项 描述 -archives <comma separated list of archives> 用逗号分隔计算中未归档的文件,仅仅针对job -conf <configuration file> 制定应用程序的配置文件 -D <property>=<value> 使用给定的属性值 -files <comma separated list of files> 用逗号分隔的文件,拷贝到Map reduce机器,仅仅针对job -jt <local> or <resourcemanager:port> 指定一个ResourceManager,仅仅针对job -libjars <comma seperated list of jars> 将用逗号分隔的jar路径包含到classpath中去,仅仅针对job 用户命令 主要是Hadoop集群普通用户常用的命令 application 主要用来打印应用信息、杀死应用进程。 用法: 参数项详情: -appId <ApplicationId> 指定要操作的应用ID -appStates <States> 和-list命令一起使用,基于应用状态来过滤应用。多个状态用逗号分隔。可用状态为:ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED -appTypes <Types> 使用-list命令,基于应用类型来过滤应用,如果应用类型有多个,用逗号分隔 -list 列出从RM返回的应用程序,使用-appTypes参数实现基于应用类型的过滤,使用-appStates参数使用基于应用状态的过滤 -kill <ApplicationId> kill指定的应用程序 -status <ApplicationId> 打印应用程序的状态 -updatePriority <Priority> 更新应用优先级,可以使用“appId”指定应用ID applicationattempt 打印application attempt的报告。 用法: 参数项详情: -help 帮助 -list <ApplicationId> 打印指定应用的application attempt列表 -status <Application Attempt Id> 打印application attempt的状态 classpath 打印获取Hadoop相关的jar以及其他必需的库所用的类路径 用法: container 打印container信息。 用法: 参数项: -help 帮助 -list <Application Attempt Id> 应用程序尝试的Containers列表 -status <ContainerId>
[阅读更多...]