硬件配置优化
HDFS配置参数调优
dfs.blocksize参数(如128MB、256MB或更大)。较大的块大小可减少NameNode元数据管理压力和网络传输次数,适合批处理场景;较小的块大小适合随机读取场景,但会增加元数据开销。dfs.replication参数设置副本数(默认3)。增加副本数可提高数据可靠性和读取并行度,但会占用更多存储空间;可根据数据重要性(如热数据)和集群成本调整。dfs.client.read.shortcircuit为true,允许DataNode直接向客户端提供本地数据,绕过NameNode,减少网络跳转延迟。dfs.namenode.handler.count(NameNode RPC线程数)和dfs.datanode.handler.count(DataNode RPC线程数)(如设置为32或更高),提高并发处理能力,应对高负载场景。操作系统层面调优
/etc/sysctl.conf文件,调整以下参数提升I/O和网络性能:
vm.swappiness=10:降低系统使用交换分区的倾向,保留更多内存给HDFS;net.core.rmem_max=16777216、net.core.wmem_max=16777216:增加网络接收/发送缓冲区大小;net.ipv4.tcp_rmem="4096 87380 16777216"、net.ipv4.tcp_wmem="4096 65536 16777216":优化TCP读写缓冲区,提高网络传输效率。systemctl disable命令关闭不需要的系统服务(如蓝牙、打印服务),释放系统资源。数据管理优化
mapreduce.job.locality.wait参数(如设置为300000毫秒,即5分钟)延长任务等待时间,让任务优先运行在数据所在节点;使用hdfs balancer工具均衡数据分布,确保各DataNode负载均衡,减少跨节点数据传输。mapreduce.map.output.compress=true(启用Map输出压缩)、dfs.compress.data=true(启用HDFS数据压缩)等参数,减少存储空间占用和网络传输时间。应用程序与资源管理优化
mapreduce.map.tasks(Map任务数)、mapreduce.reduce.tasks(Reduce任务数)参数,根据集群CPU核心数(如每个核心分配1-2个任务)和任务特性(如CPU密集型、IO密集型)最大化并行度;启用Combiner(mapreduce.job.combine.class)减少Map输出数据量,降低网络传输和Shuffle开销;调整YARN容器大小(yarn.scheduler.minimum-allocation-mb、yarn.scheduler.maximum-allocation-mb),避免容器过大或过小导致资源浪费。dfs.datanode.max.locked.memory)将频繁访问的数据块缓存在内存中,提高读取性能;使用分布式缓存(distributed.cache)存放小文件或公共配置,减少重复加载时间。