鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

开源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)"
    
    1. 如果不指定“(exclusive=…)”,则exclusive默认为true,exclusive介绍见Yarn Node Labels概述。如果鲲鹏节点资源全部留给Spark算法加速库场景使用则设置为true,否则设置为false以最大化利用节点资源。
    2. 通过执行以下命令来检查节点标签在集群中是否可见。
      1
      yarn cluster --list-node-labels
      
    3. 删除节点标签。
      • 执行以下命令删除节点标签,待删除节点标签列表使用逗号分隔。
        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每隔1个时间间隔将其加载的标签连同心跳发送给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

    1. 为启动鲲鹏算法加速库的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配置一样的值。

    2. 配置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

      详细配置说明可参考官方文档

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

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