学习笔记之Yarn命令
YARN的基本思想是将资源管理和作业调度/监控的功能分解为单独的守护进程。有一个全局的ResourceManager(RM)和每个应用程序的ApplicationMaster(AM)。应用程序可以是单个作业,也可以是DAG作业。
ResourceManager是仲裁系统中所有应用程序之间资源的最终权威机构。NodeManager是负责容器的每机器框架代理,监视它们的资源使用情况(cpu,内存,磁盘,网络),并将其报告给ResourceManager / Scheduler。Scheduler负责将资源分配给各种正在运行的应用程序,这些应用程序受到容量,队列等熟悉的限制。Scheduler是纯调度程序,因为它不会监视或跟踪应用程序的状态。
ApplicationsManager负责接受作业提交,协商执行特定于应用程序的ApplicationMaster的第一个容器,并提供失败时重新启动ApplicationMaster容器的服务。每个应用程序的ApplicationMaster负责从调度程序中协商适当的资源容器,跟踪其状态并监视进度。
资源预留通过ReservationSystem,即允许用户在指定时间资源和时间的限制(例如,截止日期),以及后备资源的配置文件,以确保重要jobs.可预见的执行组件ReservationSystem跟踪资源过时,对预留执行准入控制,并动态指示底层调度程序确保预留满员。
为了将YARN扩展到几千个节点之外,YARN 通过YARN Federation功能支持联邦的概念。联邦允许透明地将多个yarn(子)群集在一起,并使它们看起来像一个单一的大型集群。这可以用于实现更大规模,和/或允许将多个独立的群集一起用于非常大的工作,或者对于所有人都具有容量的租户。
YARN命令由bin / yarn脚本调用。运行没有任何参数的yarn脚本会打印所有命令的描述。
用法:yarn [--config confdir] COMMAND[--loglevel loglevel] [GENERIC_OPTIONS] [COMMAND_OPTIONS]
COMMAND_OPTIONS | 描述 |
- 配置confdir | 覆盖默认的配置目录。缺省值是$ {HADOOP_PREFIX} / conf。 |
--loglevel loglevel | 覆盖日志级别。有效的日志级别是FATAL, ERROR, WARN, INFO, DEBUG, and TRACE. 。默认是INFO。 |
GENERIC_OPTIONS | 多个命令支持的一组常用选项。有关更多信息,请参阅Hadoop 命令手册。 |
COMMAND COMMAND_OPTIONS |
application---用法:yarn application [options]
-appId <ApplicationId> | 指定要操作的应用程序ID |
-appStates <States> | 与-list一起使用,根据输入逗号分隔的应用程序状态列表来过滤应用程序。有效的应用程序状态可以是以下之一:ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED |
-appTypes <Types> | 与-list一起使用,根据输入逗号分隔的应用程序类型列表来过滤应用程序。 |
-help | 帮帮我 |
-list | 列出来自RM的应用程序。支持可选使用-appTypes根据应用程序类型过滤应用程序,使用-appStates过滤基于应用程序状态的应用程序。 |
-kill <ApplicationId> | 杀死应用程序。 |
-movetoqueue <Application Id> | 将应用程序移动到不同的队列。 |
-queue<Queue Name> | 使用movetoqueue命令指定将应用程序移动到哪个队列。 |
-status <ApplicationId> | 打印应用程序的状态。 |
-updateLifetime <Timeout> | 以秒为单位更新应用程序超时(从请求开始)。ApplicationId可以使用'appId'选项指定。 |
-updatePriority <Priority> | 更新应用程序的优先级。ApplicationId可以使用'appId'选项来传递。 |
jar---用法:yarn jar <jar> [mainClass]args...
运行一个jar文件。用户可以将他们的YARN代码捆绑到jar文件中并使用此命令执行它。
COMMAND_OPTIONS | 描述 |
-all | 与-list一起列出所有节点。 |
-list | 列出所有运行的节点。支持可选使用-states来根据节点状态过滤节点,并且-all列出所有节点。 |
- states<States> | 与-list一起使用,根据输入逗号分隔的节点状态列表过滤节点。 |
-status <NodeId> | 打印节点的状态报告。 |
日志---用法:yarn logs -applicationId<application ID> [options]
COMMAND_OPTIONS | 描述 |
-applicationId <application ID> | 指定一个应用程序ID |
-appOwner <AppOwner> | AppOwner(如果未指定,则假定为当前用户) |
-containerId <ContainerId> | ContainerId(如果指定了节点地址,则必须指定) |
-help | 帮帮我 |
-nodeAddress <NodeAddress> | 格式为nodename:port的NodeAddress(如果指定了容器标识,则必须指定) |
daemonlog---在守护进程中动态获取/设置由限定类名标识的日志的日志级别。有关更多信息,请参阅Hadoop 命令手册。
hadoop daemonlog -getlevel <host:port> <classname> [-protocol(http |https)] hdoop daemonlog -setlevel <host:port> <classname> <level> [-protocol(http | https)]
命令选项 | 描述 |
-getlevel host:port classname [-protocol(http | https)] | 在host:port运行的守护程序中打印由限定类名标识的日志的日志级别。所述-protocol标志指定用于连接的协议。 |
-sevelvel host:port classname level [-protocol(http | https)] | 设置由host:port运行的守护进程中由限定类名标识的日志的日志级别。所述-protocol标志指定用于连接的协议。 |
在守护进程中动态获取/设置由限定类名标识的日志的日志级别。默认情况下,该命令发送一个HTTP请求,但可以通过使用参数-protocol https来发送HTTPS请求来覆盖。举例:$ bin / hadoopdaemonlog -getlevel 127.0.0.1:50470org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG -protocol https
resourcemanager---用法:yarn resourcemanager [-format-state-store]
COMMAND_OPTIONS | 描述 |
-format-state-store | 格式化RMStateStore。这将清除RMStateStore,并且在不再需要过去的应用程序时非常有用。这应该只在ResourceManager未运行时运行。 |
-remove-application-from-state-store <appId> | 从RMStateStore中删除应用程序。这应该只在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]) -transitionToActive [--forceactive]<serviceId> -transitionToStandby <serviceId> -failover [--forcefence] [--forceactive]<serviceId> <serviceId> -getServiceState <serviceId> -getAllServiceState -checkHealth <serviceId> -help [cmd]
COMMAND_OPTIONS | 描述 |
-refreshQueues | 重新加载队列的acls,状态和调度程序的特定属性。ResourceManager将重新加载mapred-queues配置文件。 |
-refreshNodes [-g |优雅[超时秒] -client |服务器] | 刷新ResourceManager中的主机信息。这里[-g | graceful [timeout in seconds] -client | server]是可选的,如果我们指定了超时,那么在将NodeManager标记为停用之前,ResourceManager将等待超时。-client |服务器指示是否应该由客户端或ResourceManager处理超时跟踪。客户端跟踪是阻塞的,而服务器端跟踪不是。省略超时或超时值-1表示无限超时。已知问题:如果发生RM HA故障转移,服务器端跟踪将立即停用。 |
-refreshNodesResources | 在ResourceManager中刷新NodeManagers的资源。 |
-refreshSuperUserGroupsConfiguration | 刷新超级用户代理组映射。 |
-refreshUserToGroupsMappings | 刷新用户到组映射。 |
-refreshAdminAcls | 刷新用于管理ResourceManager的acls |
-refreshServiceAcl | 重新加载服务级授权策略文件ResourceManager将重新加载授权策略文件。 |
-getGroups [username] | 获取指定用户所属的组。 |
-addToClusterNodeLabels <“label1(exclusive = true),label2(exclusive = false),label3”> | 添加到群集节点标签。默认排他性是正确的。 |
-removeFromClusterNodeLabels <label1,label2,label3>(标签分割为“,”) | 从群集节点标签中删除。 |
-replaceLabelsOnNode <“node1 [:port] = label1,label2 node2 [:port] = label1,label2”> [-failOnUnknownNodes] | 替换节点上的标签(请注意,我们现在不支持在单个主机上指定多个标签。)-failOnUnknownNodes是可选的,当我们设置此选项时,如果指定的节点未知,它将失败。 |
-directlyAccessNodeLabelStore | 这是DEPRECATED,将在未来的版本中删除。直接访问节点标签存储,使用此选项,所有与节点标签相关的操作都不会连接RM。相反,他们将直接访问/修改存储的节点标签。默认情况下,它是错误的(通过RM访问)。并且请注意:如果您将yarn.node-labels.fs-store.root-dir配置到本地目录(而不是NFS或HDFS),则此选项仅适用于运行RM的计算机上运行的命令。 |
-refreshClusterMaxPriority | 刷新群集最大优先级 |
-updateNodeResource [NodeID] [MemSize] [vCores]([OvercommitTimeout]) | 更新特定节点上的资源。 |
-transitionToActive [-forceactive] [-forcemanual] <serviceId> | 将服务转换为活动状态。如果使用-forceactive选项,请尝试使目标处于活动状态而不检查是否没有活动节点。如果启用自动故障转移,则不能使用此命令。尽管您可以通过-forcemanual选项覆盖此选项,但您需要谨慎。如果启用自动故障转移,则不能使用此命令。 |
-transitionToStandby [-forcemanual] <serviceId> | 将服务转换为待机状态。如果启用自动故障转移,则不能使用此命令。尽管您可以通过-forcemanual选项覆盖此选项,但您需要谨慎。 |
-failover [-forceactive] <serviceId1> <serviceId2> | 启动从serviceId1到serviceId2的故障转移。尝试故障转移到目标服务,即使它没有准备好,如果使用了-forceactive选项。如果启用自动故障转移,则不能使用此命令。 |
-getServiceState <serviceId> | 返回服务的状态。 |
-getAllServiceState | 返回所有服务的状态。 |
-checkHealth <serviceId> | 请求该服务执行健康检查。如果检查失败,RMAdmin工具将以非零退出代码退出。 |
help[cmd] | 如果没有指定,则显示给定命令的帮助或所有命令。 |
schedulerconf--用法--yarn schedulerconf [options]
COMMAND_OPTIONS | 描述 |
-add <“queuePath1:key1 = val1,key2 = val2; queuePath2:key3 = val3”> | 用分号分隔要添加的队列的值及其队列配置。本示例添加队列“queuePath1”(完整路径名称),该队列具有队列配置key1 = val1和key2 = val2。它还添加了队列“queuePath2”,它具有队列配置key3 = val3。 |
-remove <“queuePath1; queuePath2”> | 分号分隔队列以除去。此示例删除queuePath1和queuePath2队列(完整路径名称)。注意:队列必须在被删除之前进入“ 已停止”状态。 |
-update <“queuePath1:key1 = val1,key2 = val2; queuePath2:key3 = val3”> | 分号应该更新配置的队列的分隔值。本例为queuePath1(全路径名)的队列配置设置key1 = val1和key2 = val2,并为queuePath2的队列配置设置key3 = val3。 |
-global <key1 = val1,key2 = val2> | 更新调度程序全局配置。此示例为调度程序的全局配置设置key1 = val1和key2 = val2。 |
更新调度程序配置。请注意,此功能处于alpha阶段,可能会发生变化。