Apache Hadoop YARN
概述
YRAN的基本思路是将资源管理和作业调度/监视的功能拆分为单独的守护程序。这个想法是拥有一个全局ResourceManager(RM)和每个应用程序ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的DAG 。
ResourceManager和NodeManager构成数据计算框架。ResourceManager是在系统中所有应用程序之间仲裁资源的最终权限。NodeManager是每台机器的框架代理,负责容器,监视其资源使用情况(cpu,内存,磁盘,网络),并将其报告给ResourceManager / Scheduler。
实际上,每个应用程序的ApplicationMaster是特定于框架的库,其任务是与来自ResourceManager的资源进行协商,并与NodeManager一起执行和监视任务。
ResourceManager具有两个主要组件:Scheduler和ApplicationsManager。
调度程序负责将资源分配给各种正在运行的应用程序,但要遵循熟悉的容量、队列等约束。调度程序是纯粹的调度程序,因此它对应用程序的状态不执行任何监视或跟踪。此外,它也不保证由于应用程序故障或硬件故障而重新启动失败的任务。调度程序根据应用程序的资源需求执行调度功能;基于资源容器的抽象概念来实现此目的,该容器包含内存,cpu,磁盘,网络等元素。
调度程序具有可插拔策略,该策略负责在各种队列,应用程序等之间分配群集资源。当前的调度程序(例如CapacityScheduler和FairScheduler)将是一些插件示例。
ApplicationsManager负责接受作业提交,协商用于执行特定于应用程序的ApplicationMaster的第一个容器,并提供在发生故障时重新启动ApplicationMaster容器的服务。每个应用程序ApplicationMaster负责与调度程序协商适当的资源容器,跟踪其状态并监视进度。
hadoop-2.x中的MapReduce保持与以前的稳定版本(hadoop-1.x)的API兼容性。这意味着仅通过重新编译,所有MapReduce作业仍应在YARN上保持不变。
YARN支持的概念,资源预留通过ReservationSystem,即允许用户指定资源的分布随时间和时间限制(例如,截止日期),以及后备资源,确保重要jobs.The可预见的执行组件ReservationSystem跟踪资源超时,执行保留的准入控制,并动态指示底层调度程序确保保留已满。
命令参考
概述
yarn命令由bin/yarn脚本调用。如果没有携带参数的情况下,会打印所有命令的描述。
用法:
yarn [SHELL_OPTIONS] COMMAND [GENERIC_OPTIONS] [SUB_COMMAND] [COMMAND_OPTIONS]
COMMAND_OPTIONS | 描述 |
SHELL_OPTIONS | 一组通用的外壳程序选项 |
GENERIC_OPTIONS | 多个命令支持的一组通用选项 |
COMMAND COMMAND_OPTIONS | 以下各节介绍了各种命令及其选项,这些命令已分组为“用户命令”和“管理命令” |
用户命令
对Hadoop集群的用户有用的命令
application or app
用处:打印应用程序的信息、中止应用、管理长时间运行的程序
用法:
>yarn application [options]
>yarn app [options]
COMMAND_OPTIONS | 描述 |
-appId <ApplicationId> | 指定要操作的应用程序ID |
-appStates <States> | 与-list一起使用可根据输入的逗号分隔的应用程序状态列表来过滤应用程序。可使用的状态关键字:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED |
-appTags <Tags> | 与-list一起使用,可根据输入的逗号分隔的应用程序标记列表来过滤应用程序 |
-appTypes <Types> | 与-list一起使用,可以根据输入的逗号分隔的应用程序类型列表来过滤应用程序 |
-changeQueue <Queue Name> | 将应用程序移到新队列。可以使用“ appId”选项传递ApplicationId。不建议使用“ movetoqueue”命令,此命令“ changeQueue”具有相同的功能 |
-component <Component Name> <Count> | 与-flex选项一起使用可更改为应用程序/长期运行的服务运行的组件/容器的数量。支持绝对或相对更改,例如+1、2或-3 |
-components <Components> | 与-upgrade选项一起使用可触发升级应用程序的指定组件。多个组件应以逗号分隔 |
-decommission <Application Name> | 停用应用程序/长期运行的服务的组件实例。需要-instances选项。支持使用-appTypes选项指定要使用的客户端 |
-destroy <Application Name> | 销毁已保存的应用程序规范并永久删除所有应用程序数据。支持使用-appTypes选项指定要使用的客户端 |
-enableFastLaunch | 将AM依赖项上载到HDFS,以加快将来的发布速度。支持使用-appTypes选项指定要使用的客户端 |
-flex <Application Name or ID> | 更改应用程序/长期运行服务组件的运行容器数。需要-component选项。如果提供了名称,则必须提供appType,除非它是默认的yarn-service。如果提供了ID,则将查找appType。支持使用-appTypes选项指定要使用的客户端 |
-help | 显示所有命令的描述 |
-instances <Component Instances> | 与-upgrade选项一起使用可触发升级应用程序的指定组件实例。还可以与-decommission选项一起使用以停用指定的组件实例。多个实例应以逗号分隔 |
-kill <Application ID> | 终止应用程序。可以提供应用程序集,并用空格隔开 |
-launch <Application Name> <File Name> | 保存规范并启动应用程序。可以指定选项-updateLifetime和-changeQueue来更改文件中提供的值。支持使用-appTypes选项指定要使用的客户端 |
-list | 列出应用程序。支持使用-appTypes来基于应用程序类型来过滤应用程序,支持-appStates来基于应用程序状态来过滤应用程序,并支持-appTags来基于应用程序标签来过滤应用程序。 |
-movetoqueue <Application ID> | 将应用程序移到其他队列。不推荐使用的命令。请改用’changeQueue’ |
-queue <Queue Name> | 与movetoqueue命令一起使用指定将应用程序移动到的队列 |
-save <Application Name> <File Name> | 保存应用程序的规范文件。可以指定选项-updateLifetime和-changeQueue来更改文件中提供的值。支持使用-appTypes选项指定要使用的客户端 |
-start <Application Name> | 启动以前保存的应用程序。支持使用-appTypes选项指定要使用的客户端 |
-status <ApplicationId or ApplicationName> | 打印应用程序的状态。如果提供了应用程序ID,它将显示常规YARN应用程序状态。如果提供了name,它将根据应用程序自身的实现打印应用程序特定的状态,除了默认的yarn-service类型,其余必须指定-appTypes选项 |
-stop <Application Name or ID> | 正常停止应用程序(稍后可能会再次启动)。传入名称时,必须同步传入appType(默认的yarn-service除外)。如果传入id,将自动查找appType。支持使用-appTypes选项指定要使用的客户端 |
-updateLifetime <Timeout> | 修改应用程序的生命周期。可以使用appId传入ApplicationId,以秒为单位 |
-updatePriority <Priority> | 修改应用程序的优先级。可以使用appId传入ApplicationId |
applicationattempt
用处:打印相关applicationattempt的信息
用法:
>yarn applicationattempt [options]
COMMAND_OPTIONS | 描述 |
-help | 帮助信息 |
-list <ApplicationId> | 获取所有应用程序请求的列表 |
-status <Application Attempt Id> | 打印应用程序请求的状态 |
classpath
用处:打印获取hadoop jar和依赖库的类路径。没有参数传入的情况下,输出由命令脚本设置的类路径(可能包含通配符)。其他选项在通配符展开后打印类路径,或者将类路径写入jar文件的清单中。后者在不能使用通配符且扩展的类路径超过了支持的最大命令行长度的环境中非常有用。
用法:
>yarn classpath [--glob |--jar <path> |-h |--help]
COMMAND_OPTIONS | 描述 |
–glob | 扩展通配符 |
–jar path | 在 jar 命名路径中编写类路径作为清单 |
-h, --help | 打印帮助信息 |
container
用处:打印容器相关信息
用法:
>yarn container [options]
COMMAND_OPTIONS | 描述 |
-help | 打印帮助信息 |
-list <Application Attempt Id> | 列出对应应用程序请求的容器清单 |
-status <ContainerId> | 打印容器的状态 |
jar
用处:运行jar文件。用户可以将自己编写的yarn代码打包成jar文件,再使用此命令运行
用法:
>yarn jar <jar> [mainClass] args...
logs
用处:转存容器的日志
用法:
>yarn logs -applicationId <application ID> [options]
COMMAND_OPTIONS | 描述 |
-applicationId <application ID> | 指定应用程序id |
-appOwner <AppOwner> | 指定程序所有者,默认为当前用户 |
-containerId <ContainerId> | 指定容器id,如果指定了节点id,则容器id也必须指定 |
-help | 打印帮助信息 |
-nodeAddress <NodeAddress> | 格式为nodename:port的NodeAddress(如果指定了容器ID,则必须指定) |
node
用处:打印节点相关信息
用法:
>yarn node [options]
COMMAND_OPTIONS | 描述 |
-all | 与-list一起使用列出所有节点的列表 |
-list | 列出所有运行中的节点列表。支持使用-states来进行筛选、使用-all来列出所有节点。 |
-states <States> | 与-list一起使用,使用逗号分隔的状态列表来过滤节点 |
-status <NodeId> | 打印节点的状态信息 |
queue
用处:打印队列相关信息
用法:
>yarn queue [options]
COMMAND_OPTIONS | 描述 |
-help | 打印帮助信息 |
-status <QueueName> | 获取队列的状态信息 |
version
用处:打印hadoop的version
用法:
>yarn version
envvars
用处:打印hadoop的环境变量
用法:
>yarn envvars
管理命令
Hadoop集群的管理员命令
daemonlog
动态获取/设置守护程序中由合格的类名称标识日志的日志级别
nodemanager
用处:启动NodeManager
用法:
>yarn nodemanager
proxyserver
用处:启动proxy代理服务
用法:
>yarn proxyserver
resourcemanager
用处:启动resourcemanager
用法:
> yarn resourcemanager [-format-state-store]
OPTIONS | 描述 |
-format-state-store | 格式化RMStateStore. RMStateStore会被清理。当不再使用之前的应用程序时,这个命令非常有用。应该在ResourceManager服务未启动时执行该命令。 |
-remove-application-from-state-store <appId> | 从RMStateStore中删除应用程序. 应该在ResourceManager服务未启动时执行该命令. |
-format-conf-store | 格式化YarnConfigurationStore. 这个操作会清除YarnConfigurationStore的持久化调度器配置。只有当ResourceManager没有运行时,才需要执行此操作。 |
rmadmin
用处:运行ResourceManager 管理客户端
用法:
> yarn rmadmin
-refreshQueues
-refreshNodes [-g|graceful [timeout in seconds] -client|server]
-refreshNodesResources
-refreshSuperUserGroupsConfiguration
-refreshUserToGroupsMappings
-refreshAdminAcls
-refreshServiceAcl
-getGroups [username]
-addToClusterNodeLabels <"label1(exclusive=true),label2(exclusive=false),label3">
-removeFromClusterNodeLabels <label1,label2,label3> (label splitted by ",")
-replaceLabelsOnNode <"node1[:port]=label1,label2 node2[:port]=label1,label2"> [-failOnUnknownNodes]
-directlyAccessNodeLabelStore
-refreshClusterMaxPriority
-updateNodeResource [NodeID] [MemSize] [vCores] ([OvercommitTimeout]) or -updateNodeResource [NodeID] [ResourceTypes] ([OvercommitTimeout])
-transitionToActive [--forceactive] <serviceId>
-transitionToStandby <serviceId>
-getServiceState <serviceId>
-getAllServiceState
-checkHealth <serviceId>
-help [cmd]
OPTIONS | 描述 |
-refreshQueues | 重新加载队列的acl、状态和调度程序特定的属性。ResourceManager将重新加载mapred-queues配置文件 |
-refreshNodes [-g|graceful [timeout in seconds] -client|server] | 在ResourceManager上刷新主机信息。[-g|graceful [timeout in seconds] -client|server]可选,当指定了超时,ResourceManager会持续等待超时,再将NodeManager标为已停用。-client|server代表是否应由客户端或ResourceManager处理超时跟踪。客户端跟踪被阻止,而服务器端跟踪未被阻止。忽略超时或超时-1表示无限超时。例如:如果发生RM HA故障转移,则服务器端跟踪将立即停用 |
-refreshNodesResources | 在ResourceManager上刷新NodeManager的资源。 |
-refreshSuperUserGroupsConfiguration | 刷新超级用户代理组映射 |
-refreshUserToGroupsMappings | 刷新用户与用户组的映射 |
-refreshAdminAcls | 刷新ResourceManager管理者的ACL |
-refreshServiceAcl | 重新加载服务级授权策略文件,ResourceManager将重新加载授权策略文件 |
-getGroups [username] | 获取指定用户所属的组。 |
-addToClusterNodeLabels <“label1(exclusive=true),label2(exclusive=false),label3”> | 添加集群节点标签,默认排他性为true |
-removeFromClusterNodeLabels <label1,label2,label3> (label splitted by “,”) | 删除集群节点标签 |
-replaceLabelsOnNode <“node1[:port]=label1,label2 node2[:port]=label1,label2”> [-failOnUnknownNodes] | 替换集群节点上的标签(暂时不支持单个主机上的多个标签)。-failOnUnknownNodes是可选的,当我们设置此参数时,如果指定的节点未知,命令执行失败 |
-refreshClusterMaxPriority | 刷新集群最大优先级 |
-updateNodeResource [NodeID] [MemSize] [vCores] ([OvercommitTimeout]) | 更新特定节点上的资源 |
-updateNodeResource [NodeID] [ResourceTypes] ([OvercommitTimeout]) | 更新特定节点上的资源类型。资源类型是资源管理器上可用的任何资源的逗号分隔键值对。例如,memory-mb = 1024Mi,vcores = 1,resource1 = 2G,resource2 = 4m |
-transitionToActive [–forceactive] [–forcemanual] <serviceId> | 将服务转换为活动状态, 如果使用–forceactive参数,使用目标处于活动状态下不检查是否没有活动节点。如果启用自动故障转移,则不能使用此命令 |
-transitionToStandby [–forcemanual] <serviceId> | 将服务转换为待机状态。如果启用了自动故障转移,则不能使用此命令。 |
-getServiceState <serviceId> | 返回服务的状态 |
-getAllServiceState | 返回所有服务的状态 |
-checkHealth <serviceId> | 检查服务执行运行状况。如果检查失败,RMAdmin工具将以非零的退出代码退出。 |
-help [cmd] | 显示给定命令或所有命令的帮助(如果未指定) |
schedulerconf
用处:更新调度器配置。
用法:
>yarn schedulerconf [options]
scmadmin
用处:运行共享缓存管理器管理客户端
>yarn scmadmin [options]
OPTIONS | 描述 |
-help | 帮助信息 |
-runCleanerTask | 运行清理任务 |
sharedcachemanager
用处:运行共享缓存管理器
>yarn sharedcachemanager
timelineserver
用处:启动TimeLineServer
>yarn timelineserver
registrydns
用处:启动RegistryDNS服务器
>yarn registrydns
files
File | Description |
etc/hadoop/hadoop-env.sh | 该文件存储所有Hadoop Shell命令使用的全局设置。 |
etc/hadoop/yarn-env.sh | 该文件存储所有YARN Shell命令使用的替代 |
etc/hadoop/hadoop-user-functions.sh | 该文件允许高级用户覆盖某些Shell功能 |
~/.hadooprc | 这为单个用户存储了个人环境。它在hadoop-env.sh,hadoop-user-functions.sh和yarn-env.sh文件之后进行处理,并且可以包含相同的设置。 |