Debian下Hadoop性能调优技巧
/etc/security/limits.conf
,增加用户进程可打开的文件描述符数量(如* soft nofile 65536; * hard nofile 65536
);编辑/etc/sysctl.conf
,优化网络连接设置(net.core.somaxconn = 32767
、net.ipv4.tcp_max_syn_backlog = 2048
、net.ipv4.ip_local_port_range = 1024 65535
),提升集群网络并发处理能力。sysctl vm.swappiness=0
或修改/etc/sysctl.conf
永久禁用Swap,避免Hadoop进程因内存不足而频繁交换数据到磁盘,导致性能骤降。dfs.block.size
(默认128MB,大文件处理可增至256MB或512MB),减少元数据数量,提升并行处理效率。dfs.replication
(默认3,非关键数据可降至2,节省存储空间与网络传输开销)。dfs.namenode.handler.count
(如20 * log2(集群节点数)
),提升NameNode处理DataNode心跳的能力,避免因心跳堆积导致元数据管理延迟。mapreduce.map.memory.mb
(如2048MB)、mapreduce.reduce.memory.mb
(如4096MB),避免内存不足引发频繁GC;同时设置yarn.scheduler.minimum-allocation-mb
(如1024MB)和yarn.scheduler.maximum-allocation-mb
(如8192MB),匹配YARN资源调度策略。mapreduce.job.maps
(默认由InputFormat决定)和mapreduce.job.reduces
(如0.95 * 集群Reduce Slot总数
)调整任务数量,避免任务过细(启动开销大)或过粗(负载不均衡)。job.setCombinerClass(SumCombiner.class)
),减少Map与Reduce之间的中间数据传输量,提升整体作业效率。yarn.nodemanager.resource.memory-mb
(如集群总内存的80%)和yarn.nodemanager.resource.cpu-vcores
(如集群总CPU核心数的80%),合理分配节点资源给YARN应用。CapacityScheduler
适合多租户共享集群,公平调度器FairScheduler
适合保证小作业公平性),并通过yarn.scheduler.capacity.root.queues
配置队列资源分配策略。hadoop-env.sh
中的HADOOP_HEAPSIZE
(如8GB),并为NameNode单独设置更大堆内存(如HADOOP_NAMENODE_OPTS="-Xmx16g"
),避免因堆内存不足导致OOM错误。-XX:+UseG1GC
),并设置-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间),减少GC对应用的影响;避免使用CMS收集器(已逐渐被淘汰)。dfs.datanode.data.dir
配置DataNode本地磁盘路径,确保任务优先在数据所在节点执行(减少网络传输);若无法本地化,可配置机架感知策略(dfs.network.script
),提升跨机架数据传输效率。mapred-site.xml
中设置mapreduce.map.output.compress=true
(启用Map输出压缩)、mapreduce.output.fileoutputformat.compress=true
(启用最终输出压缩),并选择Snappy(压缩快、压缩比适中)或LZO(压缩比高、需额外安装)算法,平衡压缩效率与性能。TestDFSIO
(测试HDFS读写性能)、TeraSort
(测试MapReduce排序性能)等工具进行基准测试,对比优化前后的性能变化,验证调优效果。