硬件层面优化
mapreduce.map.memory.mb设置为4GB以上,mapreduce.reduce.memory.mb设置为8GB以上)。mapreduce.map.cpu.vcores(如设置为2)和mapreduce.reduce.cpu.vcores(如设置为4)参数,充分利用CPU资源。操作系统调优
ulimit -n 65536命令或修改/etc/security/limits.conf文件,将文件描述符限制提高至65536以上。/etc/sysctl.conf文件,调整以下参数以增强网络吞吐能力:net.ipv4.tcp_max_syn_backlog = 2048(SYN队列长度)、net.ipv4.ip_local_port_range = 1024 65535(可用端口范围)、net.core.somaxconn = 2048(监听队列长度),修改后执行sysctl -p生效。Hadoop配置优化
dfs.blocksize设置为256MB或512MB,减少NameNode的元数据压力和客户端寻址时间。yarn.nodemanager.resource.memory-mb(节点可用内存,如设置为32GB)和yarn.nodemanager.resource.cpu-vcores(节点可用CPU核心数,如设置为8)参数,合理分配集群资源;调整yarn.scheduler.minimum-allocation-mb(容器最小内存,如设置为1GB)和yarn.scheduler.maximum-allocation-mb(容器最大内存,如设置为8GB),避免资源碎片化。mapreduce.map.memory.mb(Map任务内存,如4GB)、mapreduce.reduce.memory.mb(Reduce任务内存,如8GB)、mapreduce.map.java.opts(Map任务JVM堆大小,如-Xmx3200m)、mapreduce.reduce.java.opts(Reduce任务JVM堆大小,如-Xmx6400m),避免内存溢出。数据本地化与分布优化
mapreduce.job.locality.wait参数(如设置为300000毫秒)控制任务等待本地数据的时间,避免因等待本地数据而延长作业时间。core-site.xml中设置net.topology.script.file.name参数,指向机架感知脚本(如/etc/hadoop/conf/topology.sh),使Hadoop将数据副本分布在不同机架的节点上,提高容错性和数据访问效率。job.setCombinerClass(MyReducer.class)),或在Reduce阶段自定义分区(实现Partitioner接口,重写getPartition方法),将数据均匀分配到各个Reduce任务,避免部分节点负载过高。数据压缩与小文件处理
mapreduce.map.output.compress=true)和最终输出(mapreduce.output.fileoutputformat.compress=true)进行压缩,减少磁盘I/O和网络传输开销。推荐使用Snappy压缩算法(mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec),其压缩速度快且压缩比适中。hadoop archive命令生成HAR文件)、使用CombineTextInputFormat作为输入格式(job.setInputFormatClass(CombineTextInputFormat.class)),或使用Parquet、ORC等列式存储格式整合小文件。资源调度与监控