1. 硬件配置优化
2. 操作系统调优
sysctl.conf设置vm.swappiness=0,彻底关闭Swap;若必须使用,可将值设为1(最低优先级)。/etc/security/limits.conf,增加nofile(同时打开文件数)和nproc(进程数)的限制,例如:hadoop hard nofile 65536、hadoop hard nproc 65536,避免因文件描述符不足导致任务失败。/etc/sysctl.conf中调整TCP缓冲区大小(如net.core.rmem_default=67108864、net.core.wmem_default=67108864)和最大连接数(如net.core.somaxconn=8192),提高网络传输效率和并发处理能力。3. HDFS配置优化
dfs.block.size(默认64MB),大文件(如日志、视频)建议设置为256MB或512MB,减少元数据数量,提高并行读取效率;小文件(如小于128MB)可保持默认或适当增大,避免过多块导致NameNode压力过大。dfs.replication(默认3),热数据(频繁访问)保持3副本以保证可靠性,冷数据(很少访问)可降低至2副本,节省存储空间和网络开销;通过机架感知策略(dfs.network.script)将副本分布在不同机架,提高数据本地化率。dfs.namenode.name.dir(如/data/nn1,/data/nn2),为DataNode设置多个dfs.datanode.data.dir(如/data/dn1,/data/dn2),提高数据存储可靠性和读写并行度。4. MapReduce配置优化
mapred-site.xml中设置mapreduce.map.output.compress=true,并选择高效压缩算法(如mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec),减少Map到Reduce阶段的网络传输量(可降低30%-50%的网络开销)。mapreduce.job.reduces(默认1),通常设置为Map任务数的1/3-1/2(如100个Map任务设置30-50个Reduce任务),避免Reduce任务过少导致并行度不足,或过多导致资源竞争。job.setCombinerClass(SumCombiner.class))对中间结果进行局部聚合,减少Reduce阶段的数据量(如WordCount任务中,Combiner可将Map输出的单词计数合并,减少网络传输)。5. YARN配置优化
yarn-site.xml中设置yarn.nodemanager.resource.memory-mb(节点总内存)和yarn.nodemanager.resource.cpu-vcores(节点CPU核心数),例如8GB内存、4核CPU的节点可设置为memory-mb=8192、vcores=4,避免资源过度分配导致节点崩溃。yarn.scheduler.minimum-allocation-mb(最小容器内存,如1GB)和yarn.scheduler.maximum-allocation-mb(最大容器内存,如8GB),防止任务占用过多内存导致OOM(Out of Memory)错误;同时设置yarn.nodemanager.vmem-pmem-ratio(虚拟内存与物理内存的比值,如2.1),允许适量虚拟内存使用。CapacityScheduler)适合多租户共享集群(支持队列资源配额),公平调度器(FairScheduler)适合保证小作业的公平性(动态分配资源),在yarn-site.xml中配置yarn.resourcemanager.scheduler.class。6. JVM参数调优
hadoop-env.sh中设置HADOOP_OPTS,合理分配JVM堆内存(如-Xmx4g -Xms4g,堆最大值与初始值相等,避免频繁扩容),NameNode建议分配服务器内存的1/3-1/2(如8GB内存分配4GB),DataNode建议分配2-4GB。-XX:+UseG1GC),它在高吞吐量和低延迟之间取得平衡,适合大规模数据处理;避免使用SerialGC(单线程,不适合多核环境)或ParallelGC(吞吐量高但延迟大)。-XX:MaxGCPauseMillis(最大GC停顿时间,如200ms)和-XX:G1HeapRegionSize(G1区域大小,如32MB)调整GC行为,减少GC对任务的影响(如避免长时间Full GC导致任务停滞)。7. 数据存储与访问优化
core-site.xml中设置io.compression.codecs,选择Snappy(速度快,适合MapReduce、Spark)或LZO(压缩比高,适合长期存储)算法,例如io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.LzoCodec,减少数据存储空间和传输时间。dfs.replication)和机架感知(dfs.network.script),提高数据本地化率(即任务在数据所在节点执行的概率),减少网络传输(数据本地化处理的性能比远程处理高3-5倍)。8. 性能监控与持续调优
TestDFSIO测试HDFS读写性能、TeraSort测试MapReduce排序性能),定期评估集群性能(如每月一次),根据测试结果调整配置(如增加DataNode内存、调整Map任务数)。