Ubuntu环境下Hadoop资源管理优化策略
硬件配置是Hadoop资源管理的底层支撑,需根据集群规模和业务需求合理选择:
yarn.scheduler.maximum-allocation-vcores(建议设置为物理核心数的1.5-2倍)。net.core.somaxconn增大连接队列长度,net.ipv4.tcp_max_syn_backlog提升SYN请求处理能力),优化网络吞吐量。dfs.namenode.handler.count(默认10,建议调整为20-30),提升NameNode处理客户端请求的并发能力。dfs.datanode.handler.count(默认10,建议调整为15-20),提升DataNode与客户端及其他节点的数据传输效率。yarn.scheduler.minimum-allocation-mb(单个Container最小内存,默认1024MB,建议调整为2048MB,避免小Container频繁申请资源);yarn.scheduler.maximum-allocation-mb(单个Container最大内存,默认8192MB,建议根据NodeManager内存调整,如NodeManager内存为8GB,可设为6-7GB);yarn.nodemanager.resource.memory-mb(节点可用总内存)≥yarn.scheduler.maximum-allocation-mb,避免资源超额分配。yarn.nodemanager.vmem-pmem-ratio(虚拟内存与物理内存比值,默认2.1,建议设置为2.5-3.0,允许任务使用更多虚拟内存,避免因物理内存不足被杀死)。yarn.app.mapreduce.am.resource.mb(MR AppMaster内存,默认1536MB,建议调整为2048-4096MB,提升AppMaster调度能力);设置yarn.app.mapreduce.am.command-opts(AppMaster JVM参数,如-Xms1024m -Xmx3072m,确保堆内存合理分配)。mapreduce.map.memory.mb(map任务内存,默认1024MB,建议调整为1-2GB);设置mapreduce.reduce.memory.mb(reduce任务内存,默认1024MB,建议调整为2-4GB);设置mapreduce.map.java.opts/mapreduce.reduce.java.opts(map/reduce任务JVM参数,如-Xms512m -Xmx1536m,堆内存设置为任务内存的50%-75%,预留空间给JVM自身开销)。mapreduce.map.output.compress(map输出压缩,默认false,建议开启);设置mapreduce.output.fileoutputformat.compress(最终输出压缩,默认false,建议开启);选择快速压缩算法(如Snappy,压缩比约2-3倍,延迟低)。mapreduce.job.maps(map任务数量,默认由输入数据块数决定,建议根据CPU核心数调整,如每核心分配1-2个map任务);设置mapreduce.job.reduces(reduce任务数量,默认为0,建议根据数据量和集群资源调整,如数据量为1TB,可设为100-200个reduce任务)。job.setCombinerClass()),合并相同key的中间结果,减少shuffle阶段的数据传输量(可降低10%-30%的网络开销)。mapreduce.job.locality.wait(任务等待数据本地化的时间,默认3秒,建议设置为5-10秒),让任务尽量运行在数据所在节点,减少网络传输(数据本地化任务执行速度比非本地化快2-3倍)。yarn.scheduler.capacity.root.default.capacity为50%,保证默认队列占用50%集群资源),避免资源被单一用户占用。yarn.scheduler.fair.user-as-default-queue为true,每个用户拥有独立队列,资源公平分配),确保小任务及时完成。yarn.scheduler.capacity.root.default.maximum-capacity(队列最大容量,默认100%,建议设置为80%-90%,预留资源给紧急任务);对于Fair Scheduler,设置yarn.scheduler.fair.preemption(抢占机制,默认false,建议开启,允许高优先级任务抢占低优先级任务的资源)。namenode.log、ResourceManager的yarn-resourcemanager.log),查找性能瓶颈(如频繁的GC日志提示内存不足,慢查询日志提示磁盘I/O瓶颈)。