---
title: 开源Hadoop集群配置
description: "1. 为集群中的鲲鹏服务器节点打上特定标签（例如：标签为kunpeng）。配置ResourceManager以启用节点标签功能，并同步至所有节点。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/appAccelFeatures/algorithmaccelf_ml/kunpengbdssparkml_20_0026.html
sourcePath: /source/zh/kunpengbds/appAccelFeatures/algorithmaccelf_ml/kunpengbdssparkml_20_0026.html
indexId: 9e56ae6b4ae8b38a1d8f1a48334d57572033bd9d058415deaaf11544f0dbde9588
---
# 开源Hadoop集群配置

1. 为集群中的鲲鹏服务器节点打上特定标签（例如：标签为kunpeng）。配置ResourceManager以启用节点标签功能，并同步至所有节点。
  在yarn-site.xml文件中配置以下属性：
| 参数 | 说明 | 取值 |
| --- | --- | --- |
| yarn.node\-labels.fs\-store.root\-dir | 标签在HDFS的存储位置 | hdfs://namenode:port/path/to/store/node\-labels/ |
| yarn.node\-labels.enabled | 是否开启节点标签 | true |
| yarn.node\-labels.configuration\-type | 设置节点标签的配置类型 | 可以指定“centralized”、“delegated\-centralized”、“distributed”。缺省值为“centralized”，如无特殊要求则可采用缺省值。 |


  请确保yarn.node-labels.fs-store.root-dir配置的目录已经被创建，并且ResourceManager有访问权限（通常是“yarn”用户）。

2. 在Yarn上为使用机器学习算法加速库的任务创建队列（例如队列名为：boostkit）。添加/修改鲲鹏节点标签列表到Yarn，执行以下命令创建鲲鹏节点标签，任意一台服务器节点执行即可。
  1 yarn rmadmin -addToClusterNodeLabels "kunpeng(exclusive=true)"

  如果不指定“(exclusive=…)”，则exclusive默认为true，exclusive介绍见Yarn Node Labels概述。如果鲲鹏节点资源全部留给机器学习算法加速库场景使用则设置为true，否则设置为false以最大化利用节点资源。 通过执行以下命令来检查节点标签在集群中是否可见。 1 yarn cluster --list-node-labels 删除节点标签。 执行以下命令删除节点标签，待删除节点标签列表使用逗号分隔。 1 yarn rmadmin -removeFromClusterNodeLabels "<label>[,<label>,...]" 不允许删除已经与Yarn队列关联的标签。

3. 为队列设置只能使用鲲鹏标签（即：标签kunpeng）的节点。添加/修改到Yarn的节点到标签的映射。
  根据1中配置的节点标签配置类型，从以下3种中选择对应的一项进行操作。

  - 在集中式标签（centralized）设置中配置节点到标签映射，任意一台服务器节点执行即可。
    执行以下命令来为node1添加了label1，为node2添加了label2。如果没有指定节点的port，则会将该标签添加到该节点上运行的所有nodemanager。如果设置了-failOnUnknownNodes选项，如果指定的节点是未知的，此命令将失败。

    1 yarn rmadmin -replaceLabelsOnNode "node1[:port]=kunpeng node2=kunpeng" [-failOnUnknownNodes]

  - 在分布式节点标签映射（distributed）设置中配置节点，并同步至所有服务器节点。
    请参考以下参数配置，并自行创建脚本或配置文件获取节点标签。 参数 说明 yarn.node-labels.configuration-type 需要在RM中设置为“distributed”，以便从NM中配置的节点标签提供者获取节点到标签映射。 yarn.nodemanager.node-labels.provider 当在NM中将“yarn.node-labels.configuration-type”配置为“distributed”时，通过该参数来配置节点标签的提供者。该参数可配置3种值，分别为： config 当配置值为config时，会使用ConfigurationNodeLabelsProvider作为提供者。 script 当配置值为script时，会使用ScriptNodeLabelsProvider作为提供者。 提供者类名 当配置值为用户自定义类名时，自定义类需要继承org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeLabelsProvider。 yarn.nodemanager.node-labels.resync-interval-ms NM将其节点标签与RM同步的时间间隔。NM将每隔x个时间间隔将其加载的标签连同心跳发送给RM。即使标签没有被修改，也需要重新同步，因为管理员可能已经删除了由NM提供的集群标签。默认间隔为2分钟。 yarn.nodemanager.node-labels.provider.fetch-interval-ms 当“yarn.nodemanager.node-labels.provider”被配置为“config”、 “script”或者配置的类继承了AbstractNodeLabelsProvider时，会定期从节点标签提供程序中检索节点标签。此配置是为了定义间隔时间。如果配置了-1，则只在初始化期间从提供程序检索节点标签。默认为10分钟。 yarn.nodemanager.node-labels.provider.fetch-timeout-ms 当“yarn.nodemanager.node-labels.provider”被配置为"script"时，通过该配置可以设置一个超时时间，超过该时间之后，将中断查询节点标签的脚本。默认为20分钟。 yarn.nodemanager.node-labels.provider.script.path 运行的节点标签脚本配置。会从脚本的输出行中以“NODE_PARTITION:”开头的行作为节点的标签。如果脚本输出中有多行这样的输出，则以最后一行为准。即在鲲鹏服务器上脚本的输出需包含：NODE_PARTITION:kunpeng yarn.nodemanager.node-labels.provider.script.opts 传递给节点标签脚本的参数。 yarn.nodemanager.node-labels.provider.configured-node-partition 当“yarn.nodemanager.node-labels.provider”被配置为“config”时，ConfigurationNodeLabelsProvider从这个参数值中获取分区标签。

  - 在委托-集中式节点标签映射（delegated-centralized）设置中配置节点，并同步至所有服务器节点。
    请参考以下参数配置，并根据实际情况，自行开发代码，完成节点标签的获取。 参数 说明 yarn.node-labels.configuration-type 需要设置为“delegated-centralized”，以从RM中配置的节点标签提供程序获取节点到标签映射。 yarn.resourcemanager.node-labels.provider 当“yarn.node-labels.configuration-type”被配置为“delegated-centralized”时，则需要为ResourceManager配置获取节点标签的类。配置的类需要继承org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsMappingProvider。 yarn.resourcemanager.node-labels.provider.fetch-interval-ms 当“yarn.node-labels.configuration-type”被配置为“delegated-centralized”时，会定期从节点标签提供程序检索节点标签。这个配置是用来定义获取时间间隔的。如果配置为-1，则在每个节点注册后，只从提供者检索一次节点标签。默认为30分钟。 对CapacityScheduler的配置修改后，可以通过以下执行命令使其修改生效。 1 yarn rmadmin -refreshQueues


4. 提交Spark算法任务时指定为2中创建的队列（即：队列boostkit）。配置节点标签的调度器。请确保yarn-site.xml中yarn.resource.manager.scheduler.class配置为org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler。


  a. 为启动鲲鹏算法加速库的Spark任务配置专用Yarn队列（已有专用队列请跳过）。| 参数 | 说明 |
| --- | --- |
| yarn.scheduler.capacity.root.queues | 在之前配置基础上增加boostkit，多个用英文逗号分隔。 |
| yarn.scheduler.capacity.root.boostkit.capacity | 配置boostkit队列可用的资源数，根据实际资源情况配置。 |
| yarn.scheduler.capacity.root.boostkit.maximum\-capacity | 可与yarn.scheduler.capacity.root.boostkit.capacity配置一样的值。 |


  b. 配置Capacity调度器，在Capacity调度器的配置文件“capacity-scheduler.xml”中增加以下配置。| 参数 | 取值 |
| --- | --- |
| yarn.scheduler.capacity.root.accessible\-node\-labels | \* |
| yarn.scheduler.capacity.root.accessible\-node\-labels.kunpeng.capacity | 100 |
| yarn.scheduler.capacity.root.boostkit.accessible\-node\-labels | kunpeng |
| yarn.scheduler.capacity.root.boostkit.accessible\-node\-labels.kunpeng.capacity | 100 |
| yarn.scheduler.capacity.root.boostkit.accessible\-node\-labels.kunpeng.maximum\-capacity | 100 |


    详细配置说明可参考官方文档(https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/NodeLabel.html#Configuration_of_Schedulers_for_node_labels)。

  c. 提交使用Spark算法加速库的任务。
    1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash spark-submit \ --class com.bigdata.ml.RFMain \ --master yarn \ --deploy-mode cluster \ --driver-cores 36 \ --driver-memory 50g \ --jars "lib/fastutil-8.3.1.jar,lib/boostkit-ml-acc_2.12-3.0.0-spark3.3.1.jar,lib/boostkit-ml-core_2.12-3.0.0-spark3.3.1.jar,lib/boostkit-ml-kernel-2.12-3.0.0-spark3.3.1-aarch64.jar,lib/boostkit-xgboost4j-kernel-2.12-3.0.0-spark3.3.1-aarch64.jar" \ --driver-class-path "ml-test.jar:fastutil-8.3.1.jar:snakeyaml-1.17.jar:boostkit-ml-acc_2.12-3.0.0-spark3.3.1.jar:boostkit-ml-core_2.12-3.0.0-spark3.3.1.jar:boostkit-ml-kernel-2.12-3.0.0-spark3.3.1-aarch64.jar" \ --conf "spark.yarn.cluster.driver.extraClassPath=ml-test.jar:snakeyaml-1.17.jar:boostkit-ml-kernel-2.12-3.0.0-spark3.3.1-aarch64.jar:boostkit-ml-acc_2.12-3.0.0-spark3.3.1.jar:boostkit-ml-core_2.12-3.0.0-spark3.3.1.jar" \ --conf "spark.executor.extraClassPath=fastutil-8.3.1.jar:boostkit-ml-acc_2.12-3.0.0-spark3.3.1.jar:boostkit-ml-core_2.12-3.0.0-spark3.3.1.jar:boostkit-ml-kernel-2.12-3.0.0-spark3.3.1-aarch64.jar" \ ./ml-test.jar

    可通过 spark.yarn.am.nodeLabelExpression和spark.yarn.executor.nodeLabelExpression进行更细粒度的控制。
