在 Debian 上部署和调优 Hadoop,通常可以从操作系统层、Hadoop 配置层、JVM 层、网络与磁盘 I/O几个方面入手。下面给你一个偏实战的调优清单,适用于常见 Hadoop(HDFS + YARN + MapReduce)场景。
# 文件句柄数
fs.file-max = 1000000
# TCP 优化
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 虚拟内存(避免 OOM kill)
vm.swappiness = 10
vm.overcommit_memory = 1
应用:
sysctl -p
/etc/security/limits.conf
hadoop soft nofile 65536
hadoop hard nofile 65536
hadoop soft nproc 65536
hadoop hard nproc 65536
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
(建议写入 rc.local 或 systemd)
defaults,noatime,nodiratime
<property>
<name>dfs.replication</name>
<value>3</value> <!-- 根据可靠性需求 -->
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB,大文件场景 -->
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>20</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
export HADOOP_NAMENODE_OPTS="-Xmx8g"
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>61440</value> <!-- 节点总内存 -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>512</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
export HADOOP_OPTS="-XX:+UseG1GC -Xmx4g"
NameNode / ResourceManager:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
net.ipv4.tcp_keepalive_*hdfs dfsadmin -reportyarn node -listiostat -x 1如果你愿意,可以告诉我:
我可以给你一份更针对性的 Debian + Hadoop 调优配置模板。