Ubuntu下Hadoop运行慢的优化方案
硬件是Hadoop运行的基础,需根据集群规模满足以下要求:
yarn.nodemanager.resource.memory-mb设置为8GB以上),并为Map/Reduce任务分配合理内存(mapreduce.map.memory.mb建议4GB+,mapreduce.reduce.memory.mb建议8GB+)。dfs.datanode.data.dir指向SSD挂载目录);若成本有限,可选择高性能SATA SSD。yarn.nodemanager.resource.cpu-vcores匹配CPU核心数。/etc/sysctl.conf优化系统性能,例如降低vm.swappiness(如设为10)减少交换分区使用,提升I/O效率。dfs.blocksize=268435456),减少元数据操作和Map任务数量。dfs.replication=2),减少网络传输和存储开销。dfs.namenode.handler.count=64、dfs.datanode.handler.count=64)。mapreduce.map.output.compress=true、mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec)。mapreduce.job.maps约为CPU核心数的1.5倍,mapreduce.job.reduces约为CPU核心数的1倍)。job.setCombinerClass(WordCountReducer.class))。yarn.nodemanager.resource.memory-mb、yarn.nodemanager.resource.cpu-vcores),避免资源浪费。yarn-site.xml中配置yarn.resourcemanager.scheduler.class),提升资源利用率。数据本地化是减少网络传输的关键,需确保任务运行在数据所在节点:
mapreduce.job.locality.wait参数(如设为300000ms,即5分钟),让调度器等待任务分配到数据节点;/etc/sysctl.conf中的net.core.somaxconn(如设为1024)、net.ipv4.tcp_max_syn_backlog(如设为8192),增强网络吞吐能力。mapreduce.map.output.compress=true、mapreduce.output.fileoutputformat.compress=true),推荐使用Snappy(速度快)或LZO(压缩率高)编解码器。mapreduce.map.java.opts=-Xmx4096m、mapreduce.reduce.java.opts=-Xmx8192m),避免频繁Full GC。-XX:+UseG1GC),减少GC停顿时间。distributed.cache)存放频繁访问的小文件(如配置文件、字典),减少重复加载时间。