一、系统配置优化(基础环境准备)
systemctl stop firewalld && systemctl disable firewalld
;setenforce 0
临时关闭SELinux,修改/etc/selinux/config
永久生效),减少系统资源占用。/etc/security/limits.conf
,添加* soft nofile 65535
、* hard nofile 65535
(用户软/硬限制);修改/etc/pam.d/login
,添加session required pam_limits.so
,确保Hadoop进程能打开足够文件(NameNode需处理大量元数据文件)。/etc/sysctl.conf
,优化网络与内存参数:net.core.somaxconn = 65535
(增加socket监听队列长度,避免连接拒绝)、vm.swappiness = 0
(禁用swap,防止内存交换导致性能下降)、net.ipv4.tcp_tw_reuse = 1
(复用TIME-WAIT连接,提升网络吞吐);执行sysctl -p
使配置生效。二、硬件优化(性能瓶颈突破)
三、HDFS配置优化(分布式存储核心)
dfs.blocksize
(默认128MB,适合大文件分析;若处理大量小文件,可调整为64MB以减少元数据压力,但会增加NameNode负载)。dfs.replication
(默认3,适合生产环境;若存储资源紧张且对可靠性要求低,可调整为2;热数据可临时提高至4,提升读取性能)。dfs.namenode.handler.count
(默认10,建议调整为20-50,提升NameNode处理DataNode心跳与客户端请求的并发能力);dfs.datanode.data.dir
(配置多目录,如/data1/dn,/data2/dn
,分散数据存储,提高IO吞吐);启用HDFS回收站(core-site.xml
中设置fs.trash.interval=1440
(1天)、fs.trash.checkpoint.interval=120
(2小时),避免误删除数据)。四、YARN与MapReduce配置优化(资源管理与计算引擎)
yarn.nodemanager.resource.memory-mb
(设置节点可用内存,如64GB内存可分配48GB给YARN,预留16GB给系统与其他服务);yarn.scheduler.maximum-allocation-mb
(单个容器最大内存,建议不超过节点YARN内存的80%,如32GB);yarn.nodemanager.resource.cpu-vcores
(设置节点可用CPU核心数,如16核可分配12核给YARN)。mapreduce.map.memory.mb
(Map任务内存,如2GB)、mapreduce.reduce.memory.mb
(Reduce任务内存,如4GB);mapreduce.map.java.opts
(Map任务JVM堆大小,建议为任务内存的80%,如-Xmx1600m
)、mapreduce.reduce.java.opts
(Reduce任务JVM堆大小,如-Xmx3200m
);mapreduce.task.io.sort.mb
(排序缓冲区大小,建议为任务内存的10%-20%,如256MB,提升排序效率);mapreduce.reduce.shuffle.parallelcopies
(Reduce拉取Map输出的并行数,建议设置为5-10,提升shuffle效率)。五、数据管理优化(减少IO与网络开销)
mapreduce.job.locality.wait
调整等待时间,默认3秒,避免过长等待导致资源闲置)。mapreduce.output.fileoutputformat.compress=true
、mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
)。coalesce
/repartition
),将小文件合并为大文件(如每个文件≥128MB),减少NameNode元数据压力(NameNode内存占用与文件数量成正比)。六、JVM调优(提升守护进程稳定性)
HADOOP_OPTS
环境变量设置(如export HADOOP_OPTS="-Xms8g -Xmx8g"
,初始与最大堆一致,避免频繁GC)。-XX:+UseG1GC -XX:MaxGCPauseMillis=200
,目标最大停顿200ms),提升JVM稳定性。七、监控与调优(持续优化保障)
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*.jar TestDFSIO -write -nrFiles 10 -fileSize 1G
)、TeraSort(测试MapReduce排序性能,如hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen 10000000 /teragen -Dmapreduce.job.maps=100
)进行压测,识别瓶颈(如网络带宽不足、内存不够)并针对性调整。