总体思路
在 CentOS 上优化 HDFS,建议从操作系统、HDFS 关键参数、存储与网络、数据布局与安全四个层面协同调优,并以压测与监控闭环验证。
一 操作系统与内核参数
- 文件描述符与进程限制
- 提升单进程可打开文件数与系统总句柄数,避免 “Too many open files”。
- 配置示例:
- /etc/security/limits.conf
- /etc/pam.d/login
- session required pam_limits.so
- /etc/sysctl.conf
- 网络与 I/O
- 优化 TCP 队列与回收,提升高并发下的连接处理能力。
- 配置示例(/etc/sysctl.conf):
- net.core.somaxconn = 4096
- net.ipv4.tcp_max_syn_backlog = 4096
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- 磁盘 I/O 调度器:顺序读写为主的场景优先 deadline/noop,随机场景可选 bfq(视磁盘类型与负载而定)。
- 挂载选项:为数据盘添加 noatime,nodiratime 减少元数据写入开销。
二 HDFS关键配置与参数建议
- 基础与目录
- 多目录分散 I/O 与提升可靠性:
- dfs.namenode.name.dir:配置多个独立磁盘目录(如 “/data/dfs/nn1,/data/dfs/nn2”)
- dfs.datanode.data.dir:配置多磁盘目录(如 “/data/dfs/dn1,/data/dfs/dn2”)
- 块与副本
- 块大小:分析作业访问模式,大文件顺序读可增大块(如 256MB),小文件多则不宜过大。
- dfs.blocksize:建议值 256MB(按场景调整)
- 副本因子:默认 3;读多写少可适当提高,存储成本敏感可降低。
- dfs.replication:2–3(按 SLA 与成本权衡)
- 并发与线程
- 提升 NameNode 与 DataNode 请求处理能力:
- dfs.namenode.handler.count:建议从 10–20 起步,按 QPS 逐步上调
- dfs.datanode.handler.count:建议从 10–20 起步,结合磁盘与网络带宽调优
- 短路读与本地性
- 启用短路读减少网络往返:
- dfs.client.read.shortcircuit:true
- 回收站
- 防止误删并支持回滚:
- fs.trash.interval:1440(分钟,1 天)
- fs.trash.checkpoint.interval:60(分钟)
- 存储策略(HDFS 分层)
- 启用并依据热度分层存储(HOT/WARM/COLD):
- dfs.storage.policy.enabled:true
- 高可用(生产建议)
- 启用 ZooKeeper + JournalNode 的 HA,避免单点故障。
三 存储与网络硬件优化
- 存储介质:关键路径(如 NameNode 元数据、热点数据)优先 SSD;容量层可用 HDD 分层。
- 网络:优先 10Gbps 或更高带宽,计算与存储分离或专用 HDFS 网络以降低抖动。
- 数据布局:提升数据本地性,尽量在计算节点就近读取;避免跨机架频繁传输。
四 数据布局与作业侧优化
- 避免小文件:小文件会显著加重 NameNode 内存与 RPC 压力。
- 合并小文件(如 HAR、SequenceFile、CombineFileInputFormat)
- 压缩:减少磁盘占用与网络传输,优先 Snappy/LZO(平衡压缩率与 CPU)
- 示例(MapReduce 侧):
- mapreduce.map.output.compress:true
- mapreduce.map.output.compress.codec:org.apache.hadoop.io.compress.SnappyCodec
- 数据本地性:合理规划作业与数据分布,提升本地读比例。
五 压测与监控闭环
- 基准测试
- 使用 TestDFSIO 评估读写吞吐与瓶颈:
- 写测试:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB
- 读测试:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB
- 监控与迭代
- 持续观察 HDFS Web UI、NameNode/DataNode 日志、RPC 队列、磁盘/网络利用率,结合压测结果逐步微调并发、块大小与副本策略。