一、系统配置优化(基础环境准备)
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)进行压测,识别瓶颈(如网络带宽不足、内存不够)并针对性调整。