在 Debian 上优化 Hadoop,通常要从 系统层、JVM、Hadoop 配置、磁盘/网络、以及运行模式 几个方面来做。下面给你一套实战向的优化思路,从最见效的开始。
编辑 /etc/sysctl.conf:
# 增加文件描述符
fs.file-max = 1000000
# 网络优化
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 禁止 swap(重要)
vm.swappiness = 1
使生效:
sysctl -p
Hadoop 不建议使用 swap:
swapoff -a
永久关闭(编辑 /etc/fstab,注释 swap 行)。
编辑 /etc/security/limits.conf:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
查看当前调度器:
cat /sys/block/sda/queue/scheduler
建议:
echo deadline > /sys/block/sda/queue/scheduler
或(推荐):
echo noop > /sys/block/sda/queue/scheduler
java -version
在 hadoop-env.sh 中:
export HADOOP_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC"
⚠️ Xms = Xmx,避免动态扩容
以下配置文件在 $HADOOP_HOME/etc/hadoop/
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
✅ 大文件场景:块大小 256MB~512MB
✅ 副本数不要盲目 3
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
✅ 提升读写吞吐
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>16384</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
⚠️ 根据你的内存真实情况调整
hdfs-site.xml:
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
✅ 每个磁盘单独挂载
✅ 不要放系统盘
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
sysctl -w net.ipv6.conf.all.disable_ipv6=1
ethtool -L eth0 combined 8
| 场景 | 建议 |
|---|---|
| 测试 | 单节点伪分布式 |
| 生产 | 多节点 + HA |
| 小文件 | HDFS + HAR / Ozone |
| 大文件 | 增大 block size |
❌ 小文件过多
❌ 开启 swap
❌ 内存超分配
❌ JVM 使用默认 GC
❌ 所有组件跑在一台机器
ulimit -n
free -h
swapon -s
df -h
jps
你可以直接告诉我:
我可以给你一份 针对你环境的完整优化配置文件。