Hadoop在Ubuntu上的资源分配策略是什么
小樊
33
2025-12-10 21:34:02
Hadoop在Ubuntu上的资源分配策略
一 核心架构与调度器
- 资源管理与调度由 YARN 负责,核心角色包括 ResourceManager(RM)、NodeManager(NM) 与 ApplicationMaster(AM)。RM 仲裁集群资源,NM 管理本机容器,AM 为具体作业向 RM 申请容器并与 NM 协作运行任务。调度器是可插拔的,常用有 FIFO Scheduler、Fair Scheduler 与 Capacity Scheduler,分别适用于简单场景、多用户公平共享与多租户容量隔离。调度器在 yarn-site.xml 中通过 yarn.resourcemanager.scheduler.class 指定。
二 节点资源配置
- 在 yarn-site.xml 定义节点可分配资源与容器约束:
- yarn.nodemanager.resource.memory-mb:节点可分配给容器的总物理内存(MB)。
- yarn.nodemanager.resource.cpu-vcores:节点可分配的虚拟 CPU 核数。
- yarn.scheduler.minimum-allocation-mb / maximum-allocation-mb:单个容器可申请的最小/最大内存。
- yarn.scheduler.minimum-allocation-vcores / maximum-allocation-vcores:单个容器可申请的最小/最大 vCPU。
- yarn.nodemanager.vmem-pmem-ratio:虚拟内存相对物理内存的上限倍率,用于容器虚拟内存超限判断。
- yarn.nodemanager.local-dirs / log-dirs:中间结果与日志目录(可配置多目录以分摊 I/O)。
三 容器与内存计算关系
- 容器内存请求需落在 RM 的最小/最大容器内存区间;常见 MapReduce 容器内存通过 mapreduce.{map|reduce}.memory.mb 设置,对应任务 JVM 堆由 mapreduce.{map|reduce}.java.opts 控制(通常设为容器内存的约 70%–80% 以留出堆外与开销空间)。
- 虚拟内存检查遵循:容器虚拟内存 ≤ 容器物理内存 × yarn.nodemanager.vmem-pmem-ratio;超出将被 NM 标记为失败。
- 节点可容纳容器数量的粗略上界:
- 按内存:containers ≤ yarn.nodemanager.resource.memory-mb / mapreduce.map.memory.mb
- 按 vCPU:containers ≤ yarn.nodemanager.resource.cpu-vcores / 每容器 vCPU 数
- 示例(仅示意):若节点内存 16384 MB、容器内存 4096 MB,则理论最多约 4 个容器(实际还会受 vCPU 与 AM/系统预留影响)。
四 队列与多租户策略
- 通过 CapacityScheduler 或 FairScheduler 在 capacity-scheduler.xml / fair-scheduler.xml 定义队列、容量/权重、权限与抢占策略,实现多用户或多团队的资源隔离与公平分配。提交作业时可通过 mapreduce.job.queuename 指定目标队列,RM 依据队列配额与调度策略分配容器。
五 数据局部性与数据分布
- 调度优先将任务分配到数据所在节点(Node-local),其次同机架(Rack-local),最后跨机架,以降低网络开销;可通过 mapreduce.job.locality.wait 控制等待本地化的时间窗口。
- 在 HDFS 侧,合理的 dfs.replication(副本因子)与块布局影响数据分布与读取性能;当节点间数据不均衡时,可使用 hdfs balancer 进行数据块再平衡(如设置阈值 -threshold 控制迁移力度)。