Hadoop在Ubuntu上的资源管理
导读:Hadoop在Ubuntu上的资源管理实践 一 核心概念与容量规划 资源模型:由 YARN 统一管理集群资源,核心资源为 内存(MB) 与 CPU 虚拟核(vcores)。NodeManager 上报可用资源,ResourceManage...
Hadoop在Ubuntu上的资源管理实践
一 核心概念与容量规划
- 资源模型:由 YARN 统一管理集群资源,核心资源为 内存(MB) 与 CPU 虚拟核(vcores)。NodeManager 上报可用资源,ResourceManager 按队列与调度策略分配容器(Container)。
- 容量规划步骤:
- 明确节点总内存与已用内存,保留系统与安全余量(建议预留 10%–20%)。
- 设置 yarn.nodemanager.resource.memory-mb 为节点可分配给 YARN 的内存总量。
- 设置 yarn.nodemanager.resource.cpu-vcores 为可分配给 YARN 的 vcores 数(通常不超过物理核心数)。
- 结合作业类型(CPU 密集或 I/O 密集)与并发度,规划容器规格与数量,避免资源碎片与过度切分。
二 关键配置与示例
- 计算资源与容器规格
- 容器内存上限:yarn.scheduler.maximum-allocation-mb
- 容器内存下限:yarn.scheduler.minimum-allocation-mb
- 容器 vcores 上限:yarn.scheduler.maximum-allocation-vcores
- 容器 vcores 下限:yarn.scheduler.minimum-allocation-vcores
- 建议:让“容器规格”为“节点资源”的整数约数,减少碎片;Map/Reduce 的 JVM 堆建议设置为“容器内存 × 0.8”左右,留出堆外与本地缓存空间。
- 存储与 I/O
- HDFS 块大小:dfs.blocksize(默认 128MB,可按数据规模与访问模式调至 256MB 或更高以减少小文件与元数据压力)。
- 数据副本:dfs.replication(多节点环境常用 3,单机或测试可设为 1)。
- 示例配置(单节点或伪分布式,便于起步)
- yarn-site.xml
< configuration> < property> < name> yarn.nodemanager.resource.memory-mb< /name> < value> 8192< /value> < /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> 4096< /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.nodemanager.aux-services< /name> < value> mapreduce_shuffle< /value> < /property> < /configuration> - hdfs-site.xml
< configuration> < property> < name> dfs.replication< /name> < value> 1< /value> < /property> < property> < name> dfs.blocksize< /name> < value> 268435456< /value> < !-- 256MB --> < /property> < /configuration> - mapred-site.xml
< configuration> < property> < name> mapreduce.framework.name< /name> < value> yarn< /value> < /property> < property> < name> mapreduce.map.java.opts< /name> < value> -Xmx2048m< /value> < /property> < property> < name> mapreduce.reduce.java.opts< /name> < value> -Xmx2048m< /value> < /property> < property> < name> mapreduce.map.output.compress< /name> < value> true< /value> < /property> < property> < name> mapreduce.output.fileoutputformat.compress< /name> < value> true< /value> < /property> < /configuration>
- yarn-site.xml
三 日常运维与监控
- 集群与节点健康
- 查看 HDFS 健康与容量:hdfs dfsadmin -report
- 查看 YARN 应用列表与状态:yarn application -list、yarn application -status
- 终止异常作业:yarn application -kill
- Web 界面
- HDFS NameNode:http://:9870
- YARN ResourceManager:http://:8088
- 观察要点
- 队列与应用的 Pending/Running 状态、容器分配与失败重试。
- NodeManager 的 内存与 vcores 使用率、磁盘与网络 I/O。
- 是否存在大量 Map/Reduce 失败、数据本地化率低等问题。
四 作业级调优要点
- 并行度与数据布局
- 合理设置 mapreduce.job.maps/reduces 或基于数据规模与分片策略控制并发;提高 dfs.blocksize 可降低小文件与元数据压力。
- 数据本地化
- 通过 mapreduce.job.locality.wait 控制任务等待本地数据的时长,尽量在数据所在节点执行 Map 任务,减少网络传输。
- 压缩与 I/O
- 启用中间与输出压缩:mapreduce.map.output.compress、mapreduce.output.fileoutputformat.compress,减少磁盘与网络开销。
- JVM 与内存
- 结合容器内存设置 mapreduce.{ map|reduce} .java.opts,通常将堆设为容器内存的 70%–80%,避免 OOM 与频繁 GC。
- 调度与队列
- 通过 yarn.scheduler.minimum/maximum-allocation-mb 与 yarn.scheduler.minimum/maximum-allocation-vcores 控制容器规格上下限,减少资源碎片并提升吞吐。
五 快速排障清单
- 容器申请被拒或长时间 Pending:检查 yarn.scheduler.maximum-allocation-mb/vcores 是否过小、集群资源是否充足、队列配额是否受限。
- Map/Reduce 频繁失败或 GC 过长:核对 mapreduce.{ map|reduce} .java.opts 与容器内存匹配,适当增大堆或降低并发度。
- 数据本地化率低:观察作业本地化分布,适当增大 mapreduce.job.locality.wait,并排查数据分布与节点健康。
- 磁盘或网络瓶颈:结合 dfs.replication 与 dfs.blocksize 调整数据布局与副本策略,必要时使用更快存储(如 SSD)优化 I/O。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Ubuntu上的资源管理
本文地址: https://pptw.com/jishu/757717.html
