Ubuntu系统层面优化
/etc/sysctl.conf文件优化系统性能,例如降低vm.swappiness值(如设置为10)以减少交换分区使用,提高I/O效率;调整网络栈参数(如net.core.rmem_max、net.core.wmem_max)增大网络缓冲区,提升节点间通信性能。systemctl disable <service_name>命令关闭不需要的系统服务(如蓝牙、打印服务等),减少系统启动时的资源消耗,确保Hadoop任务获得更多可用资源。/etc/hadoop/conf/hdfs-site.xml中设置dfs.datanode.data.dir指向SSD路径),SSD的高速读写性能可显著提升HDFS的文件操作效率。Hadoop配置参数调优
dfs.blocksize(如256MB或512MB),减少Map任务数量,降低元数据操作开销;dfs.replication(如生产环境设为3,测试环境设为2),平衡数据冗余与存储成本;dfs.namenode.handler.count(如设为64)和dfs.datanode.handler.count(如设为32),提高NameNode和DataNode的并发处理能力。mapreduce.job.maps(如设为$((NODE_CORES * 1.5)))和mapreduce.job.reduces(如设为$((NODE_CORES * 0.75)))参数值,充分利用集群CPU资源;mapreduce.map.output.compress=true并指定压缩算法(如snappy),减少Map任务到Reduce任务的中间数据传输量;mapreduce.map.java.opts(如-Xmx4G)和mapreduce.reduce.java.opts(如-Xmx8G),避免JVM频繁垃圾回收导致的任务延迟。yarn.nodemanager.resource.memory-mb(如设为节点总内存的80%)和yarn.nodemanager.resource.cpu-vcores(如设为节点CPU核心数的80%),合理分配容器资源;Capacity Scheduler或Fair Scheduler(在yarn-site.xml中设置yarn.resourcemanager.scheduler.class),根据作业优先级动态分配资源,提高集群利用率。数据与任务优化
mapreduce.job.locality.wait参数(如设为3秒),让Map任务优先在数据所在节点运行,减少跨节点数据传输的网络开销;若无法实现本地化,可启用数据传输压缩(如mapreduce.shuffle.compress=true)降低传输量。job.setCombinerClass(SumCombiner.class))合并相同key的中间结果,减少Reduce任务的输入数据量,降低网络传输和计算开销。EXPLAIN命令),对倾斜key进行拆分(如添加随机前缀)或过滤,确保各任务负载均衡,避免单个任务成为性能瓶颈。监控与维护