硬件是性能基础,需根据集群角色分配资源:
通过系统参数调整提升Hadoop运行效率:
sudo swapoff -a临时关闭,修改/etc/fstab永久禁用。/etc/sysctl.conf,增加以下配置以提升并发处理能力:net.core.somaxconn = 32767 # 网络连接队列长度
fs.file-max = 800000 # 最大文件描述符数
net.core.rmem_default = 67108864 # TCP接收缓冲区默认大小
net.core.wmem_default = 67108864 # TCP发送缓冲区默认大小
net.core.rmem_max = 67108864 # TCP接收缓冲区最大值
net.core.wmem_max = 67108864 # TCP发送缓冲区最大值
执行sudo sysctl -p使配置生效。/etc/sysctl.conf中的vm.overcommit_memory为2(限制内存超额分配),vm.overcommit_ratio为2(超额分配比率为2%),避免内存耗尽导致OOM。针对HDFS、YARN、MapReduce三大组件调整参数,优化资源利用率:
20 * log2(集群节点数),提升NameNode处理DataNode心跳的能力。memory-mb=6144(预留2G给系统)、cpu-vcores=6(预留2核给系统)。minimum-allocation-mb=1024、maximum-allocation-mb=8192,避免资源碎片化。yarn-site.xml中设置yarn.nodemanager.vmem-check-enabled=false,解决JDK与YARN虚拟内存检测的兼容性问题。mapreduce.job.reduces=2)。job.setCombinerClass())合并相同key的数据,减少Map与Reduce之间的数据传输量。优化JVM垃圾回收(GC)与内存分配,减少Full GC导致的停顿:
hadoop-env.sh中设置JVM堆内存,例如NameNode可配置为-Xmx4g(最大堆内存4GB),DataNode可配置为-Xmx2g(根据节点内存调整)。-XX:+UseG1GC(G1GC)、-XX:+UseParallelGC(并行GC)。-XX:MaxGCPauseMillis=200),平衡吞吐量与延迟。通过压缩减少磁盘存储与网络传输开销:
mapred-site.xml中配置:<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
mapreduce.map.output.compress=true、mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec,压缩Map任务的输出数据,减少Shuffle阶段的网络传输。提升数据与计算的协同效率,减少网络传输:
hdfs-site.xml中启用机架感知(dfs.network.script指向机架感知脚本),让Hadoop优先将数据存储在同一机架的节点上,减少跨机架传输。dfs.replication配合机架感知),确保数据冗余的同时提升本地化读取率。通过监控工具识别性能瓶颈,持续优化:
TestDFSIO(测试HDFS读写性能)、TeraSort(测试MapReduce排序性能)进行基准测试,验证优化效果。