温馨提示×

CentOS Hadoop 资源怎样分配

小樊
47
2025-11-22 05:02:31
栏目: 智能运维

CentOS 上 Hadoop 资源分配实操指南

一 核心思路与规划

  • Hadoop 2.x/3.x 中,计算资源由 YARN 统一管理,HDFS 负责存储;因此资源分配重点在 NodeManager 的 CPU 与内存调度器队列配额容器规格,并结合 HDFS 副本与块大小 做存储侧优化。
  • 规划步骤建议:
    • 明确节点角色与数量(如 ResourceManager、NameNode、NodeManager、DataNode 的分布)。
    • 统计单机可用资源:物理内存、CPU 核数、磁盘类型与容量。
    • 选择调度器:CapacityScheduler(多队列、容量配额)或 FairScheduler(按权重公平分配)。
    • 设定容器粒度:Map/Reduce 容器内存与 vCore,保证与节点资源可整除、便于调度。
    • 结合作业画像(并发、内存峰值、Shuffle 规模)做保守起步与压测迭代。

二 YARN 资源分配关键配置

  • $HADOOP_HOME/etc/hadoop/yarn-site.xml 中设置节点与调度边界(示例为单节点 16 GB 内存、8 vCore 的保守起步,可按需放大):
<configuration>
  <!-- 节点可分配资源 -->
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>14336</value> <!-- 预留约 1 GB 给系统/OS -->
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>8</value>
  </property>

  <!-- 容器请求边界 -->
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>8192</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-vcores</name>
    <value>1</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
    <value>4</value>
  </property>

  <!-- 选择调度器 -->
  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
  </property>
</configuration>
  • 调度器队列示例(CapacityScheduler,文件 capacity-scheduler.xml):
<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</value>
    <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</property>
  </property>
</configuration>
  • 容器与 JVM 的常用配比(经验值,需结合作业实测微调):
    • 容器内存建议为 1–8 GB 的阶梯,且与 vCore 成组(如 2 vCore/4 GB、4 vCore/8 GB)。
    • Map/Reduce 容器内存:如 mapreduce.map.memory.mb=2048mapreduce.reduce.memory.mb=4096
    • 堆内存与容器关系:通常 Container JVM 堆 ≈ 容器内存 × 0.8(为本地缓存/开销留余量)。
    • 预留系统内存:每台 NodeManager 至少预留 1–2 GB 给 OS 与其他守护进程。

三 HDFS 存储资源分配要点

  • hdfs-site.xml 中调整存储与元数据相关参数(示例):
<configuration>
  <!-- 副本数:三副本为生产常用,权衡可靠性与存储成本 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

  <!-- 块大小:大文件/吞吐型作业用 256 MB 或 512 MB -->
  <property>
    <name>dfs.block.size</name>
    <value>268435456</value> <!-- 256 MB -->
  </property>

  <!-- 元数据与数据目录(多磁盘/SSD 建议分别挂载) -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data1/hdfs/datanode,/data2/hdfs/datanode</value>
  </property>

  <!-- NameNode 并发处理能力 -->
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>30</value>
  </property>
</configuration>
  • 多磁盘数据均衡:使用 DiskBalancer 均衡单节点内各磁盘使用率
    • 生成计划:hdfs diskbalancer -plan ds001 -out ds001-plan.json
    • 执行计划:hdfs diskbalancer -execute ds001-plan.json
    • 查询进度:hdfs diskbalancer -query ds001
  • 堆内存与 NameNode 稳定性:在 hadoop-env.sh 中设置
    • export HADOOP_HEAPSIZE=4096(示例为 4 GB,视元数据规模调整)。

四 提交作业时的资源控制

  • 通过命令行为 MapReduce 作业设置容器规格与并发:
    • yarn jar /path/to/hadoop-mapreduce-examples.jar wordcount
      -D mapreduce.job.maps=10
      -D mapreduce.job.reduces=5
      -D mapreduce.map.memory.mb=2048
      -D mapreduce.reduce.memory.mb=4096
      -D mapreduce.map.cpu.vcores=1
      -D mapreduce.reduce.cpu.vcores=2
      /input /output
  • 提交后可用命令查看节点与资源使用:
    • yarn node -list
    • 通过 ResourceManager Web UI 观察队列与容器分配情况。

五 验证与优化建议

  • 验证与监控
    • 节点与资源:yarn node -list;查看 ResourceManager Web UI 的队列、应用与容器分布。
    • HDFS 健康:hdfs dfsadmin -report;NameNode Web(常见端口 50070)查看容量、块与副本状态。
  • 优化要点
    • 调度策略:多租户/多业务优先 CapacitySchedulerFairScheduler,按队列配额与权重避免资源争用。
    • 数据本地化:尽量让计算靠近数据,减少跨节点网络开销。
    • 硬件与网络:优先 SSD、万兆/更高速网络;合理设置 dfs.replicationdfs.block.size 匹配作业 IO 特征。
    • 持续压测与迭代:以实际作业瓶颈(内存、Shuffle、磁盘 IO)为驱动,小步调整容器规格与队列配额。

0