Ubuntu Hadoop 怎样进行资源管理
小樊
34
2025-12-30 12:50:11
Ubuntu Hadoop 资源管理实践指南
一 核心机制与关键参数
- 资源管理由 YARN 负责:由 ResourceManager 统一调度、由 NodeManager 在节点侧提供与隔离容器资源。资源以容器为单位申请,容器是内存与(可选)CPU 的逻辑封装。
- 内存维度常用参数(示例值与含义):
- yarn.nodemanager.resource.memory-mb:节点可分配给 YARN 的总内存(如:8192 MB)。
- yarn.scheduler.minimum-allocation-mb:单个容器可申请的最小内存(如:1024 MB)。
- yarn.scheduler.maximum-allocation-mb:单个容器可申请的最大内存(如:16384 MB)。
- 虚拟内存检查与比率:yarn.nodemanager.vmem-pmem-ratio(默认 2.1)、yarn.nodemanager.pmem-check-enabled、yarn.nodemanager.vmem-check-enabled,用于超限杀进程与 OOM 防护。
- CPU 维度常用参数(需显式开启与配置):
- yarn.nodemanager.resource.cpu-vcores:节点可分配给 YARN 的 vCore 总数。
- yarn.scheduler.minimum-allocation-vcores / maximum-allocation-vcores:容器可申请的最小/最大 vCore。
- 启用精细 CPU 调度:设置 yarn.nodemanager.allow-cgroups 为 true,并结合 cgroups 做 CPU 隔离(可选,更严格的限额与绑核)。
二 配置步骤与环境准备
- 配置环境变量(示例,写入 /etc/profile 或 ~/.bashrc 并 source 生效):
- export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
- export HADOOP_HOME=/opt/hadoop
- export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml(关键片段):
- 指定 Shuffle 服务:
- yarn.nodemanager.aux-servicesmapreduce_shuffle
- 设置节点可用内存与容器边界(按机器内存调整):
- yarn.nodemanager.resource.memory-mb8192
- yarn.scheduler.minimum-allocation-mb1024
- yarn.scheduler.maximum-allocation-mb16384
- 可选 CPU 与 cgroups:
- yarn.nodemanager.resource.cpu-vcores8
- yarn.scheduler.minimum-allocation-vcores1
- yarn.scheduler.maximum-allocation-vcores4
- yarn.nodemanager.allow-cgroupstrue
- 使配置生效并重启 YARN:
- source /etc/profile 或 source ~/.bashrc
- $HADOOP_HOME/sbin/stop-yarn.sh && $HADOOP_HOME/sbin/start-yarn.sh
- 验证参数是否生效:
- 命令行:yarn node -list
- Web UI:ResourceManager 默认端口 8088,查看节点资源与已分配容器。
三 队列与调度策略
- 三种常用调度器与适用场景:
- FIFO Scheduler:先进先出,简单但不适合共享集群(大作业可能阻塞小作业)。
- Capacity Scheduler:多队列、容量配额、支持弹性与用户限额,适合多组织/多团队共享。
- Fair Scheduler:按应用动态公平分配,支持抢占与更灵活的队列配置,适合多用户弹性需求。
- 启用与示例(以 Capacity 为例,yarn-site.xml):
- yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
- 在 capacity-scheduler.xml 中定义队列层级与容量,例如:
- root.queues=prod,dev
- root.prod.capacity=40
- root.dev.capacity=60
- 可进一步设置最大容量、用户限额、AM 资源占比、队列状态等,实现强隔离与弹性共享的平衡。
四 运行期管理与监控
- 常用运维命令(按需选用):
- 查看与管控应用:
- yarn application -list
- yarn application -status
- yarn application -kill
- 查看节点与资源:
- yarn node -list
- 访问 8088 端口 Web UI 观察集群、队列、容器与资源使用。
- 动态扩缩容思路(不改变物理规模的前提下提升利用率):
- 调整容器边界:适度增大 maximum-allocation-mb / vcores,允许大任务申请更多资源。
- 调整节点供给:在 yarn.nodemanager.resource.memory-mb / cpu-vcores 中反映真实可用资源(如内存扩容或节点上线后修改)。
- 队列与调度器参数:为关键队列设置合理的容量/最大容量、AM 占比与用户限额,避免资源被长作业长期占用。
五 实践建议与常见坑
- 容器内存与 JVM 堆:容器内存应大于任务堆(建议留有 20%–30% 余量),避免堆外与容器开销导致 OOM 或被杀。
- 虚拟内存检查:若任务因虚拟内存超限被杀,可结合业务适当调高 yarn.nodemanager.vmem-pmem-ratio,或优化任务内存使用;也可关闭虚拟内存检查(不推荐生产)。
- 小文件与容器碎片化:大量小作业会产生大量容器,增加调度开销;可通过合并小文件、提高容器最小内存等方式缓解。
- 调度器选择:多用户/多团队优先 Capacity 或 Fair;单团队或批处理链路简单可用 FIFO。
- 变更生效:修改 yarn-site.xml / capacity-scheduler.xml 后需重启 YARN 相关组件,并清理或滚动升级应用以避免状态不一致。