温馨提示×

Ubuntu HDFS如何资源调度

小樊
45
2025-12-20 19:46:35
栏目: 智能运维

Ubuntu上HDFS资源调度的正确认知与总体架构

  • HDFS 负责分布式存储,不直接做资源调度;计算任务的资源调度由 YARN 完成。
  • 典型组件分工:NameNode/DataNode(HDFS存储)、ResourceManager/NodeManager(YARN资源管理与调度)、MapReduce/Spark 等应用(向YARN申请容器运行)。
  • 因此,在 Ubuntu 上谈“HDFS资源调度”,实质是配置与调优 YARN 的调度器与资源参数,并配合 HDFS 的存储参数(如副本数)共同影响作业性能与稳定性。

在Ubuntu上启用与配置YARN调度

  • 基础配置(均为 $HADOOP_HOME/etc/hadoop/ 下的 XML):
    • mapred-site.xml:设置计算框架为 YARN
      • mapreduce.framework.name:yarn
    • yarn-site.xml:启用 Shuffle 服务与指定 RM 主机
      • yarn.nodemanager.aux-services:mapreduce_shuffle
      • yarn.resourcemanager.hostname:<RM主机名或IP>
  • 资源配置要点(示例为单节点或小型集群,按机器内存与核数调整):
    • yarn.nodemanager.resource.memory-mb:8192(NodeManager 可分配的总内存 MB)
    • yarn.nodemanager.resource.cpu-vcores:4(NodeManager 可分配的 vcore 数)
    • yarn.scheduler.minimum-allocation-mb:1024(容器最小内存)
    • yarn.scheduler.maximum-allocation-mb:8192(容器最大内存)
    • yarn.scheduler.minimum-allocation-vcores:1
    • yarn.scheduler.maximum-allocation-vcores:4
  • 调度器选择与队列(二选一或多队列):
    • CapacityScheduler(推荐多租户)
      • yarn.resourcemanager.scheduler.class:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
      • 在 capacity-scheduler.xml 中定义队列与容量,例如:
        • yarn.scheduler.capacity.root.queues:default,queue1,queue2
        • yarn.scheduler.capacity.root.default.capacity:50
        • yarn.scheduler.capacity.root.default.maximum-capacity:100
        • yarn.scheduler.capacity.root.queue1.capacity:25
        • yarn.scheduler.capacity.root.queue2.capacity:25
    • FairScheduler(按用户/应用公平分配)
      • yarn.resourcemanager.scheduler.class:org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
      • 在 fair-scheduler.xml 中配置队列、权重与抢占:
        • yarn.scheduler.fair.user-as-default-queue:true
        • yarn.scheduler.fair.preemption:true
        • yarn.scheduler.fair.allocation.file:/etc/hadoop/conf/fair-scheduler.xml
  • 应用侧 MapReduce 必要配置(mapred-site.xml):
    • mapreduce.jobhistory.address:<JobHistory主机>:10020
    • mapreduce.jobhistory.webapp.address:<JobHistory主机>:19888
  • 生效与启动
    • 首次启动前格式化 NameNode:hdfs namenode -format
    • 启动服务:start-dfs.shstart-yarn.sh
    • 验证进程:jps 应看到 NameNode、DataNode、ResourceManager、NodeManager(以及可选的 JobHistoryServer

与HDFS相关的性能与调度协同优化

  • 块大小:通过 dfs.blocksize 调整(更大块利于顺序读/大文件吞吐,更小块利于小文件与随机读,需权衡 NameNode 内存与作业并发)。
  • 副本数:通过 dfs.replication 设置(提高可靠性与读取并发,代价是存储放大;伪分布式常用 1,生产通常 3)。
  • 数据本地性:增加 DataNode 数量、合理机架感知,减少跨节点网络传输,提升作业调度与执行效率。
  • 小文件治理:合并小文件、使用 SequenceFile/Parquet/ORC 等容器格式,降低 NameNode 元数据压力。
  • 压缩:在 MapReduce/作业链路中启用 Snappy/LZO/Bzip2 等压缩,降低网络与存储开销(权衡 CPU)。
  • 缓存与I/O:对热点数据启用 HDFS 缓存(集中式缓存),并结合 SSD/NVMe、更高带宽网络提升 I/O。

常用运维命令与验证

  • 集群健康与存储:hdfs dfsadmin -report
  • HDFS 基本操作:hdfs dfs -mkdir /path-ls-put-get-rm
  • YARN 应用管理:yarn application -list-status -kill
  • 服务状态与端口:
    • 进程检查:jps
    • Web UI(默认端口示例):ResourceManager 8088NameNode 50070JobHistory 19888(如启用)

0