最近在做实验,实验需要进行分区域计算,网上查了资料后发现Yarn Node Labels + Capacity-Scheduler可以实现我的需求

但是当任务提交到capacity-scheduler调度器的default队列时,任务卡在ACCEPTED阶段。

网上看了很多发现没有这方面的信息,最后在Apache hadoop官网的官方手册上查到有以下信息

property Value
yarn.scheduler.capacity.<queue-path>.default-node-label-expression Value like “hbase”, which means: if applications submitted to the queue without specifying node label in their resource requests, it will use “hbase” as default-node-label-expression. By default, this is empty, so application will get containers from nodes without label.

从官网上说明来看,如果yarn.scheduler.capacity.<queue-path>.default-node-label-expression设置了value,那么提交到queue中的任务如果没有说明用什么label,则使用这个value所定义的label;如果这个value为空,那么提交到这个队列的任务只能在不含有label的node上执行。此处的value只能是一个label,不能是多个label。

也就是说yarn node label中的queue只能默认使用一个label,不能多label使用,如果某个queue没有指定label,那么该queue中job只能在没有label的node上执行。

我的实验环境中所有的nodemanager都设置了yarn node labels,yarn.scheduler.capacity.root.default.default-node-label-expression=' ',所以当我任务提交到capacity-scheduler调度器的default队列时,任务卡在ACCEPTED阶段,因为没有不绑定label的节点,所以任务卡在了accepted了。

下面说下我的实验环境及需求

我的需求:

我的capacity-scheduler.xml文件中配置:yarn.scheduler.capacity.root.default.default-node-label-expression=' '

上图中default queue队列不能在Host1,Host2,Host3上运行,因为Host1,Host2,Host3都有Node-label。

根据以上需求,我配置文件如下:

在yarn-site.xml中开启capacity-schedule

<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

配置capacity-scheduler.xml文件

<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,area0,area1,area2</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property> <property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>25</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area0.capacity</name>
<value>25</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area1.capacity</name>
<value>25</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area2.capacity</name>
<value>25</value>
</property> <property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area0.maximum-capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area1.maximum-capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area2.maximum-capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.accessible-node-labels</name>
<value>*</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area0.accessible-node-labels</name>
<value>area0</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area1.accessible-node-labels</name>
<value>area1</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area2.accessible-node-labels</name>
<value>area2</value>
</property> <property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.area0.capacity</name>
<value>33</value>
</property> <property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.area1.capacity</name>
<value>33</value>
</property> <property>
<name>yarn.scheduler.capacity.root.accessible-node-labels.area2.capacity</name>
<value>34</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area0.accessible-node-labels.area0.capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area1.accessible-node-labels.area1.capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area2.accessible-node-labels.area2.capacity</name>
<value>100</value>
</property> <property>
<name>yarn.scheduler.capacity.root.default-node-label-expression</name>
<value> ,area0,area1,area2</value>
</property>
 <!--value为空,则root.default队列只能在没有label的node上执行,而我环境环境中不存在没有label的node,所以提交到root.default的任务卡死-->
<property>
<name>yarn.scheduler.capacity.root.default.default-node-label-expression</name>
<value> </value>
</property> <property>
<name>yarn.scheduler.capacity.root.area0.default-node-label-expression</name>
<value>area0</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area1.default-node-label-expression</name>
<value>area1</value>
</property> <property>
<name>yarn.scheduler.capacity.root.area2.default-node-label-expression</name>
<value>area2</value>
</property>
</configuration>

添加Yarn Node Labels

#添加标签
yarn rmadmin -addToClusterNodeLabels area0,area1,area2
#节点添加标签
yarn rmadmin -replaceLabelsOnNode Host1:,area0
yarn rmadmin -replaceLabelsOnNode Host2:,area1
yarn rmadmin -replaceLabelsOnNode Host3:,area2
#查看标签
yarn node -status Host1:45454
#也可以通过Yarn管理页面查看Node Label

配置Yarn Node Labels存储目录,这样不用每次重启服务后重新配置Yarn Node Labels。

在yarn-site.xml中添加下列信息

<property>
<name>yarn.node-labels.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.address</name>
<value>0.0.0.0:</value>
</property> <property>
<name>yarn.node-labels.manager-class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager</value>
</property>
<property>
<name>yarn.node-labels.fs-store.root-dir</name>
<value>hdfs://Host0:8020/yarn/node-labels</value>
<description>标签数据在HDFS上的存储位置</description>
</property>

在HDFS上创建相应的目录,并修改权限,我权限设置成了777

这样配置好之后,yarn node labels就不用重复配置了

关于YARN Node Labels的一点理解的更多相关文章

  1. Yarn Node Labels

    Yarn Node Labels + Capacity-Scheduler 在yarn-site.xml中开启capacity-schedule yarn-site.xml <property& ...

  2. <Yarn><Node Labels>

    Go through official docs For the official docs of Yarn node label, plase see here. Overview Node lab ...

  3. 六:YARN Node Labels

    参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-label-based-scheduling/ 为不同的DATANODE打标签,通过标签 ...

  4. rt-thread中软件定时器组件超时界限的一点理解

    @2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...

  5. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  6. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  7. iOS 的一点理解(一) 代理delegate

    做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...

  8. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  9. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

随机推荐

  1. Hadoop在启动时的坑——start-all.sh报错

    1.若你用的Linux系统是CentOS的话,这是一个坑: 它会提示你JAVA_HOME找不到,现在去修改文件: .修改hadoop配置文件,手动指定JAVA_HOME环境变量 [${hadoop_h ...

  2. python-责任链模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 当你作为一名coder已经快三十却还还没有女朋友,家中父母已经着急万分,此时要求 ...

  3. 锋利的Jquery之插件Cookie记住密码

    先下载Jquery cookie js ,下载路径: http://plugins.jquery.com/cookie/ 记住,jquery的包要放在cookie的包前面,否则会产生异常 <!D ...

  4. Thinkphp+ECharts生成柱状图

    1.首先进ECharts官网下载echarts.js 点击下载,结合TP5讲解,主要代码在js里面,更多请到ECharts官网 2.引进echarts.js <!DOCTYPE html> ...

  5. 使用ThinkPHP实现生成缩略图及显示

    首先了解父类Image.class.php(ThinkPHP/Library/Think/Image.class.php)中的一些函数 1:open() 打开被处理的图片 2:thumb() 生成缩略 ...

  6. js-ES6学习笔记-Promise对象(2)

    1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...

  7. Ubuntu16.04搭建kubernetes v1.11.2集群

    1.节点介绍         master      cluster-1      cluster-2      cluster-3 hostname        k8s-55      k8s-5 ...

  8. Oracle中Database Link的创建和Synonyms

    在工作中我遇到过这样的一个问题,就是当我需要将远程主机上Oracle数据中某个表的数据copy到本地Oracle时,有多种方法可以实现.1.将所需要的数据导出到csv或其他格式的文档,复制到本地进行直 ...

  9. 使用 Azure CLI 创建 Windows 虚拟机

    Azure CLI 用于从命令行或脚本创建和管理 Azure 资源. 本指南详细介绍如何使用 Azure CLI 部署运行 Windows Server 2016 的虚拟机. 部署完成后,我们连接到服 ...

  10. 176条DevOps人员常用的linux命令速查表

      线上查询及帮助命令 文件和目录操作命令 查看文件及内容处理命令 文件压缩及解压缩命令 信息显示命令 搜索文件命令 用户管理命令 基础网络操作命令 深入网络操作命令 有关磁盘与文件系统的命令 系统权 ...