Yarn Label 调度

1. Yarn Label标签创建

当重启ResourceManager时,可以保证Yarn Label标签在服务重启之后依然可用,需要在HDFS上指定 Yarn Label的存储路径,具体操作如下:

  1. HDFS上创建目录,用于存放Yarn Label标签数据(注意创建的目录Yarn要可以访问),如下命令可能会被使用到
hdfs dfs -mkdir -p /yarn/node-labels
hdfs dfs -chown -R yarn:yarn /yarn/node-labels
hdfs dfs -chmod -R 700 /yarn/node-labels
  1. 启动集群标签功能
<property>
    <name>yarn.node-labels.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.node-labels.fs-store.root-dir</name>
    <value>hdfs://<host>:<port>/<absolute_path_to_node_label_directory></value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

重启ResourceManager配置生效

yarn-daemon.sh stop  resourcemanager
yarn-daemon.sh start resourcemanager
  1. yarn创建集群标签
yarn rmadmin -addToClusterNodeLabels "<label1>(exclusive=<true|false>),<label2>(exclusive=<true|false>)"

注:exclusive并不是必须的参数,默认值为true
4. 删除集群标签

yarn rmadmin -removeFromClusterNodeLabels "<label1>,<label2>"

注:如果某个Label已经关联Queue,那么你无法从集群中将其移除

2. 为集群节点创建Label标签

  1. 节点关联标签
yarn rmadmin -replaceLabelsOnNode "<node1>:<port>=<label1> <node2>:<port>=<label2>"

注:这里用于关联的集群标签必须是之前定义好的,这一步是将集群标签与节点关联(为节点打标签)
2. 删除节点标签 (将节点的标签置为空)

yarn rmadmin -replaceLabelsOnNode "<node_name>"

3. 创建Queue并关联标签

<configuration>
    <!-- 定义了root下有三个队列root.pro root.dev root.def -->
    <property>
        <name>yarn.scheduler.capacity.root.queues</name>
        <value>pro,dev,def</value>
    </property>
    <!-- 定义了root队列默认分区的资源容量为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.capacity</name>
        <value>100</value>
    </property>
    <!-- 定义root队列的默认分区的资源最大容量为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 定义了root队列可以访问的标签为所有分区,如果为空则表示只能访问默认分区 -->
    <property>
        <name>yarn.scheduler.capacity.root.accessible-node-labels</name>
        <value>*</value>
    </property>
    <!-- 定义了root队列可以访问的cpu分区的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.accessible-node-labels.cpu.capacity</name>
        <value>100</value>
    </property>
    <!-- 定义了root队列可以访问的cpu分区的最大容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.accessible-node-labels.cpu.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 定义了root队列可以访问的mem分区的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.accessible-node-labels.mem.capacity</name>
        <value>100</value>
    </property>
    <!-- 定义了root队列可以访问的mem分区的最大容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.accessible-node-labels.mem.maximum-capacity</name>
        <value>100</value>
    </property>

    <!--队列root.pro使用默认分区的容量为40%-->
    <property>
        <name>yarn.scheduler.capacity.root.pro.capacity</name>
        <value>40</value>
    </property>
    <!-- 队列root.pro使用默认分区的最大容量为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 队列root.pro可以访问的分区cpu和mem -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.accessible-node-labels</name>
        <value>cpu,mem</value>
    </property>
    <!-- 队列root.pro默认访问cpu分区 -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.default-node-label-expression</name>
        <value>cpu</value>
    </property>
    <!-- 队列root.pro访问cpu分区的容量为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.accessible-node-labels.cpu.capacity</name>
        <value>100</value>
    </property>
    <!-- 队列root.pro访问cpu分区的最大容量为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.accessible-node-labels.cpu.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 队列root.pro访问50%的mem分区容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.accessible-node-labels.mem.capacity</name>
        <value>50</value>
    </property>
    <!-- 队列root.pro可以访问100%的mem分区的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.pro.accessible-node-labels.mem.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 定义root.dev队列访问默认分区的比例为30% -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.capacity</name>
        <value>30</value>
    </property>
    <!-- 定义root.dev队列访问默认分区的最大比例为100% -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
        <value>100</value>
    </property>
    <!-- 定义root.dev队列访问的分区为mem -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.accessible-node-labels</name>
        <value>mem</value>
    </property>
    <!-- 定义root.dev队列访问mem分区的容量为50% -->
    <property>
        <name>yarn.scheduler.capacity.root.dev.accessible-node-labels.mem.capacity</name>
        <value>50</value>
    </property>
    <!-- 定义root.dev队列访问mem分区的最大容量为100%-->
    <property>
        <name>yarn.scheduler.capacity.root.dev.accessible-node-labels.mem.maximum-capacity</name>
        <value>100</value>
    </property>

    <!-- 定义root.def队列访问默认分区30%的容量 -->
    <property>
        <name>yarn.scheduler.capacity.root.def.capacity</name>
        <value>30</value>
    </property>
    <!-- 定义root.def队列访问默认分区最大容量为100%-->
    <property>
        <name>yarn.scheduler.capacity.root.def.maximum-capacity</name>
        <value>100</value>
    </property>
</configuration>

注:在配置完capacity-scheduler.xml之后,需要刷新下队列,很重要,在删除集群标签时也要修改该配置文件,然后刷新列表

yarn rmadmin -refreshQueues

猜你喜欢

转载自blog.csdn.net/co_zjw/article/details/81974977