在 Debian 上优化 Hadoop,通常不是“改一个参数”就能解决,而是系统层 + Hadoop 配置层 + 运维方式一起做。下面按实战优先级给你一套可落地的优化清单。
Hadoop(尤其 HDFS / YARN)对 fd 和内存非常敏感。
# 查看当前限制
ulimit -n
# 修改 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
修改后重新登录或重启。
Swap 会导致 JVM GC 卡死。
sudo swapoff -a
永久禁用(注释 /etc/fstab 中 swap 行):
# /etc/fstab
# UUID=xxx none swap sw 0 0
使用 ext4 或 xfs,推荐 xfs(HDFS 大文件更友好)。
mkfs.xfs /dev/sdb
mount -o noatime,nodiratime /dev/sdb /data
/etc/fstab 示例:
/dev/sdb /data xfs noatime,nodiratime 0 0
# 增大 TCP 缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
写入 /etc/sysctl.conf 永久生效。
大文件场景:
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB -->
</property>
小文件多 → 不建议改大,应考虑:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
测试环境可降为 1~2。
hadoop-env.sh:
export HADOOP_NAMENODE_OPTS="-Xmx8g -XX:+UseG1GC"
经验:
yarn-site.xml:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>61440</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
避免:
yarn.scheduler.minimum-allocation-mb=1024
yarn.scheduler.maximum-allocation-mb=16384
export YARN_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200"
apt install openjdk-11-jdk
Hadoop 3.x 推荐:
不要用 start-all.sh 当生产方案。
推荐:
❌ 小文件太多
❌ swap 没关
❌ fd 不够
❌ 副本数乱设
❌ JVM 用默认 GC
❌ 磁盘 IO 瓶颈(单盘)
free -h
df -h
ulimit -n
jps
yarn node -list
hdfs dfsadmin -report
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置文件。