Ubuntu下提升Hadoop处理速度的多维度优化策略
yarn.nodemanager.resource.memory-mb调整NodeManager可用内存),避免频繁磁盘交换(Swap)。建议根据集群规模,NameNode内存不低于8GB,DataNode内存不低于4GB。dfs.datanode.data.dir)、NameNode元数据目录(dfs.namenode.name.dir)配置为SSD挂载路径。yarn.nodemanager.resource.cpu-vcores参数,根据节点CPU核心数合理分配(如8核节点可分配6-7个vcores)。dfs.replication参数(默认3),在可靠性与带宽消耗间取得平衡(如集群内部可设置为2)。dfs.blocksize参数设置。dfs.replication(生产环境建议3,测试环境可设为1),避免过多副本占用存储和网络资源。dfs.namenode.handler.count(默认10,可调整为30-50)、dfs.datanode.handler.count(默认10,可调整为20-30)参数设置。mapreduce.job.maps(默认1)、mapreduce.job.reduces(默认1)参数设置,建议值为CPU核心数的1.5-2倍(如8核节点设置12-16个Map任务)。mapreduce.map.output.compress=true)和最终输出(mapreduce.output.fileoutputformat.compress=true)启用Snappy或LZO压缩,减少磁盘I/O和网络传输量(Snappy压缩速度快,适合Hadoop场景)。mapreduce.map.java.opts(默认1GB,可调整为2-4GB)、mapreduce.reduce.java.opts(默认1GB,可调整为4-8GB)参数设置(需结合节点内存调整)。yarn.scheduler.minimum-allocation-mb(容器最小内存,默认1GB,可调整为2GB)、yarn.scheduler.maximum-allocation-mb(容器最大内存,默认8GB,可调整为16GB),避免资源碎片化。/etc/sysctl.conf文件,调整以下参数提升I/O和网络性能:
vm.swappiness=10(降低交换分区使用,优先使用物理内存);fs.file-max=655360(增加最大打开文件数,适应HDFS大量文件需求);net.core.somaxconn=1024(增加TCP连接队列长度,提升网络并发能力)。修改后执行sysctl -p生效。systemctl disable <服务名>(如bluetooth、cups)关闭不需要的系统服务,释放内存和CPU资源。mapreduce.job.locality.wait参数(默认3秒)控制任务等待数据本地化的时间,尽量让Map任务在数据所在节点运行,减少网络传输。若数据分布不均,可适当降低该值。Partitioner接口)合理分配数据,避免数据倾斜(部分任务处理量远大于其他任务)。例如,在WordCount作业中,按单词首字母分区可均衡负载。job.setCombinerClass()),减少中间数据量。