温馨提示×

CentOS HDFS资源分配策略如何设置

小樊
52
2025-12-31 12:33:50
栏目: 智能运维

CentOS 上 HDFS 资源分配策略设置指南

一 架构澄清与总体思路

  • HDFS 负责分布式存储;资源分配与调度由 YARN 完成(ResourceManager、NodeManager、ApplicationMaster、Container)。因此谈“资源分配策略”,核心是配置 YARN 调度器与队列,并配合 HDFS 存储策略(副本、块大小、磁盘均衡)共同达成性能与成本的平衡。常见调度器有 CapacitySchedulerFair Scheduler

二 配置步骤与关键参数

  • 规划节点资源
    • 统计每台机器的 总内存CPU 核数,为 OS 与 HDFS 预留 后,将可用资源分配给 YARN(例如:预留 4–8GB 给系统,其余给 NodeManager)。
  • 修改 YARN 资源配置(yarn-site.xml)
    • 关键参数示例与说明:
      • yarn.nodemanager.resource.memory-mb:单节点可分配给容器的总内存(如:16384 MB)
      • yarn.nodemanager.resource.cpu-vcores:单节点可分配的 vCPU 数(如:8
      • yarn.scheduler.minimum-allocation-mb:容器最小内存(如:1024 MB)
      • yarn.scheduler.maximum-allocation-mb:容器最大内存(如:16384 MB)
      • yarn.scheduler.minimum-allocation-vcores:容器最小 vCPU(如:1
      • yarn.scheduler.maximum-allocation-vcores:容器最大 vCPU(如:8
      • yarn.resourcemanager.scheduler.class:调度器类(CapacityScheduler 或 FairScheduler)
      • yarn.nodemanager.aux-services:启用 mapreduce_shuffle
    • 示例片段(yarn-site.xml):
      <configuration>
        <property>
          <name>yarn.nodemanager.resource.memory-mb</name>
          <value>16384</value>
        </property>
        <property>
          <name>yarn.nodemanager.resource.cpu-vcores</name>
          <value>8</value>
        </property>
        <property>
          <name>yarn.scheduler.minimum-allocation-mb</value>
          <value>1024</value>
        </property>
        <property>
          <name>yarn.scheduler.maximum-allocation-mb</value>
          <value>16384</value>
        </property>
        <property>
          <name>yarn.scheduler.minimum-allocation-vcores</value>
          <value>1</value>
        </property>
        <property>
          <name>yarn.scheduler.maximum-allocation-vcores</value>
          <value>8</value>
        </property>
        <property>
          <name>yarn.resourcemanager.scheduler.class</name>
          <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
        </property>
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
      </configuration>
      
  • 配置调度器队列
    • CapacityScheduler(capacity-scheduler.xml):定义队列层级与容量、最大容量、AM 资源占比等。
      <configuration>
        <property>
          <name>yarn.scheduler.capacity.root.queues</name>
          <value>default,etl,analytics</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.default.capacity</name>
          <value>50</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.etl.capacity</name>
          <value>30</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.analytics.capacity</name>
          <value>20</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
          <value>80</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.etl.maximum-capacity</name>
          <value>50</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.analytics.maximum-capacity</name>
          <value>40</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
          <value>0.3</value>
        </property>
      </configuration>
      
    • Fair Scheduler(fair-scheduler.xml):定义队列、权重、是否启用抢占等。
      <configuration>
        <property>
          <name>yarn.scheduler.fair.user-as-default-queue</name>
          <value>true</value>
        </property>
        <property>
          <name>yarn.scheduler.fair.preemption</name>
          <value>true</value>
        </property>
        <property>
          <name>yarn.scheduler.fair.allocation.file</name>
          <value>/etc/hadoop/conf/fair-scheduler.xml</value>
        </property>
      </configuration>
      
  • 配置 MapReduce 使用 YARN(mapred-site.xml)
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
      <property>
        <name>mapreduce.jobhistory.address</name>
        <value>rm-host:10020</value>
      </property>
      <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>rm-host:19888</value>
      </property>
    </configuration>
    
  • 同步配置并重启服务
    • 将配置分发到所有节点后,重启 ResourceManagerNodeManager(或使用 systemctl 管理),再启动 HDFSYARN
      start-dfs.sh
      start-yarn.sh
      
    • 验证进程:jps 应能看到 NameNode、DataNode、ResourceManager、NodeManager、JobHistoryServer

三 HDFS 侧存储与数据布局策略

  • 块大小(影响 Map 并行度与落盘行为)
    • hdfs-site.xml:设置 dfs.blocksize(如:268435456256MB;大文件/吞吐型作业可取 512MB/1GB)。
  • 副本数(可靠性与存储开销权衡)
    • hdfs-site.xml:设置 dfs.replication(常用 3;冷热数据可分队列/路径设置不同副本策略)。
  • 目录与端口(基础连通与高可用)
    • core-site.xml:fs.defaultFS(如:hdfs://nn-host:8020
    • hdfs-site.xml:dfs.namenode.name.dir、dfs.datanode.data.dir(多磁盘用逗号分隔)
    • 常用 Web/服务端口:NameNode 50070DataNode 50075ResourceManager 8088(便于观测与排障)。
  • 磁盘均衡(DataNode 内多盘均衡)
    • 使用 DiskBalancer 做盘间均衡,避免单盘热点:
      hdfs diskbalancer -plan <node> -out <plan.json>
      hdfs diskbalancer -execute <plan.json>
      hdfs diskbalancer -query <node>
      
  • NameNode 并发与堆内存
    • hdfs-site.xml:提高 dfs.namenode.handler.count(可按 DataNode 数量的约 10% 设定)
    • hadoop-env.sh:调整 HADOOP_HEAPSIZE(如:4096 表示 4GB 堆)。

四 验证与监控

  • 服务与资源状态
    • HDFS:hdfs dfsadmin -report(查看 容量、已用、DataNode 数
    • YARN:yarn node -list(查看 节点资源与状态
    • Web UI:ResourceManager 8088(队列/应用/资源视图)、NameNode 50070(HDFS 概览)
  • 队列与应用观测
    • CapacityScheduler/FairScheduler UIYARN Web UI 观察队列使用率、AM 占比、抢占与排队情况,结合作业指标微调队列容量与容器大小。

五 常见注意事项

  • 容器大小与节点资源需匹配:确保 maximum-allocation-mb ≤ NodeManager 可用内存,且容器规格是 最小规格的整数倍,避免碎片与无法分配。
  • 合理设置 AM 资源占比(如 maximum-am-resource-percent),避免大量应用同时启动导致 AM 争用
  • 修改 yarn.nodemanager.resource.memory-mb 等“总量类”参数通常需要 重启 NodeManager 才能生效,变更前做好窗口期与回滚预案。
  • 多租户/多业务建议启用 队列配额与访问控制,并开启 日志聚合 便于审计与问题定位。

0