阅读量:2
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-mbname>
<value>14336value>
property>
<property>
<name>yarn.nodemanager.resource.cpu-vcoresname>
<value>8value>
property>
<property>
<name>yarn.scheduler.minimum-allocation-mbname>
<value>1024value>
property>
<property>
<name>yarn.scheduler.maximum-allocation-mbname>
<value>8192value>
property>
<property>
<name>yarn.scheduler.minimum-allocation-vcoresname>
<value>1value>
property>
<property>
<name>yarn.scheduler.maximum-allocation-vcoresname>
<value>4value>
property>
<property>
<name>yarn.resourcemanager.scheduler.classname>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulervalue>
property>
configuration>
- 调度器队列示例(CapacityScheduler,文件 capacity-scheduler.xml):
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queuesname>
<value>default,etl,analyticsvalue>
property>
<property>
<name>yarn.scheduler.capacity.root.default.capacityname>
<value>50value>
property>
<property>
<name>yarn.scheduler.capacity.root.etl.capacityname>
<value>30value>
property>
<property>
<name>yarn.scheduler.capacity.root.analytics.capacityvalue>
<value>20value>
property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacityname>
<value>80value>
property>
<property>
<name>yarn.scheduler.capacity.root.etl.maximum-capacityname>
<value>50value>
property>
<property>
<name>yarn.scheduler.capacity.root.analytics.maximum-capacityname>
<value>40property>
property>
configuration>
- 容器与 JVM 的常用配比(经验值,需结合作业实测微调):
- 容器内存建议为 1–8 GB 的阶梯,且与 vCore 成组(如 2 vCore/4 GB、4 vCore/8 GB)。
- Map/Reduce 容器内存:如 mapreduce.map.memory.mb=2048、mapreduce.reduce.memory.mb=4096。
- 堆内存与容器关系:通常 Container JVM 堆 ≈ 容器内存 × 0.8(为本地缓存/开销留余量)。
- 预留系统内存:每台 NodeManager 至少预留 1–2 GB 给 OS 与其他守护进程。
三 HDFS 存储资源分配要点
- 在 hdfs-site.xml 中调整存储与元数据相关参数(示例):
<configuration>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.block.sizename>
<value>268435456value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>/data/hdfs/namenodevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>/data1/hdfs/datanode,/data2/hdfs/datanodevalue>
property>
<property>
<name>dfs.namenode.handler.countname>
<value>30value>
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 jar /path/to/hadoop-mapreduce-examples.jar wordcount
- 提交后可用命令查看节点与资源使用:
- yarn node -list
- 通过 ResourceManager Web UI 观察队列与容器分配情况。
五 验证与优化建议
- 验证与监控
- 节点与资源:yarn node -list;查看 ResourceManager Web UI 的队列、应用与容器分布。
- HDFS 健康:hdfs dfsadmin -report;NameNode Web(常见端口 50070)查看容量、块与副本状态。
- 优化要点
- 调度策略:多租户/多业务优先 CapacityScheduler 或 FairScheduler,按队列配额与权重避免资源争用。
- 数据本地化:尽量让计算靠近数据,减少跨节点网络开销。
- 硬件与网络:优先 SSD、万兆/更高速网络;合理设置 dfs.replication 与 dfs.block.size 匹配作业 IO 特征。
- 持续压测与迭代:以实际作业瓶颈(内存、Shuffle、磁盘 IO)为驱动,小步调整容器规格与队列配额。
以上就是关于“CentOS Hadoop 资源怎样分配”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm