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排序性能)等工具进行基准测试,对比优化前后的性能变化,验证调优效果。