温馨提示×

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.dirdfs.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.mbmapreduce.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 9000NameNode 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 建立容量与性能基线,变更前后回归验证。

0