CentOS Hadoop 配置如何优化
小樊
46
2025-12-31 12:24:36
CentOS 上 Hadoop 配置优化实战指南
一 系统层优化
- 内存与交换
- 将 vm.swappiness 调低至 1,减少换页;必要时临时关闭 swapoff -a(仅测试环境),生产环境建议保留小幅 swappiness 并结合容量规划。
- 透明大页与虚拟内存
- 禁用透明大页的碎片整理:echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag;检查状态确保生效。
- 脏页与回写策略
- 适度提高 vm.dirty_ratio=60,允许内核在更高水位再回写,提升顺序写吞吐(需结合业务延迟敏感度测试)。
- 磁盘 I/O 调度与队列
- 将调度器改为 deadline,提升吞吐与延迟稳定性:echo deadline > /sys/block/sdX/queue/scheduler;提高队列深度:echo 64 > /sys/block/sdX/queue/nr_requests。
- 网络栈
- 启用 TCP window scaling,放大发送窗口;提升接收缓冲上限:net.core.rmem_max=16777216,跨机房/高带宽场景能显著改善带宽利用率。
- 时间同步
- 全集群部署 NTP,保证 NameNode/DataNode 心跳与 RPC 时序一致,避免因时钟漂移导致异常。
- 资源与权限
- 增大文件描述符:echo " - nofile 65535" >> /etc/security/limits.conf*;按需关闭不必要服务,减少资源争用。
二 HDFS 关键参数
- 并发与 RPC
- 提升 dfs.namenode.handler.count(建议按 20 × logN 估算,N 为集群 DataNode 数),增强 NameNode 对心跳与元数据请求的并发处理能力。
- 块与副本
- 结合作业类型调整 dfs.blocksize(如 128MB/256MB),大文件/长任务倾向更大块以减少 NameNode 元数据与任务数;dfs.replication 在可靠性与存储/带宽间权衡(多数生产用 3)。
- 多目录与存储布局
- 配置 dfs.namenode.name.dir 与 dfs.datanode.data.dir 多磁盘目录,分散 I/O 与提升可靠性;优先使用 SSD 承载热点数据与元数据。
- 回收站
- 启用 fs.trash.interval=1440(分钟),误删可恢复,建议同时设置 fs.trash.checkpoint.interval 合理周期。
- 缓存与本地化
- 合理设置 HDFS 块缓存 策略提升读热点性能;调度层面强化 数据本地化,减少跨节点网络传输。
- 小文件治理
- 通过合并、归档(如 SequenceFile/Parquet)降低小文件数量,减轻 NameNode 内存与 RPC 压力。
三 YARN 与 MapReduce 调优
- 容器与内存
- 设置 yarn.nodemanager.resource.memory-mb 为节点可用物理内存的 70%–80%;yarn.scheduler.maximum-allocation-mb 与队列配额匹配集群上限。
- 任务容器:mapreduce.map.memory.mb / mapreduce.reduce.memory.mb 与 mapreduce.map.cpu.vcores / mapreduce.reduce.cpu.vcores 成对配置,避免 OOM 与过度切片。
- Shuffle 与排序
- 提升 mapreduce.reduce.shuffle.parallelcopies(如 10–20)与 mapreduce.task.io.sort.factor,减少 spill 次数与合并压力;按内存适度增大 mapreduce.task.io.sort.mb。
- 压缩
- 开启 mapreduce.map.output.compress=true,选用 Snappy/LZO 在 CPU 与网络/磁盘间平衡;输出也可按需压缩。
- 推测执行
- 长尾与不稳定节点较多的场景可关闭 mapreduce.{map|reduce}.speculative,避免资源争抢与无效计算。
四 网络拓扑与高可用
- 机架感知
- 配置 topology.script.file.name,实现机架级调度与容错,减少跨机架流量、提升吞吐与稳定性。
- 带宽与端口
- 为 HDFS/YARN 配置专用网络与充足带宽;按需放行端口(如 HDFS RPC 9000、NameNode Web 50070),生产环境不建议直接关闭防火墙。
- 容量均衡
- 使用 HDFS Balancer 定期均衡节点容量,避免热点与性能劣化。
- 高可用(HA)
- 部署 QJM/ZooKeeper 实现 Active/Standby NameNode,至少 3 个 JournalNode;为 ResourceManager 配置 HA 消除单点。
五 压测与监控闭环
- 基准测试
- 使用 TestDFSIO 进行写/读压测:写测试可临时关闭虚拟内存检测,写入多个大文件;读测试完成后清理测试数据,评估带宽与实际吞吐并定位瓶颈。
- JVM 与 GC
- 采用 G1 GC,设置 -XX:MaxGCPauseMillis=200;用 jstat -gc / jmap -heap 持续观察停顿与堆使用,必要时结合 JFR 精确定位。
- 系统监控
- 监控 iostat -xmt 1(磁盘)、网络吞吐与丢包、RPC 队列、容器与队列资源使用;结合 Ganglia/Prometheus 建立容量与性能基线,变更前后回归验证。