一、硬件资源优化
确保集群节点硬件配置满足Hadoop运行需求,尤其是CPU、内存和存储:
二、操作系统调优
优化Ubuntu系统内核参数及系统设置,提升系统资源利用率:
/etc/sysctl.conf文件,优化TCP/IP堆栈和内存管理。例如:
vm.swappiness=10(降低交换分区使用频率,优先使用物理内存);net.core.rmem_max=16777216、net.core.wmem_max=16777216(增大TCP读写缓冲区,提升网络传输效率);sysctl -p使配置生效;systemctl disable <服务名>关闭不需要的启动项(如桌面环境、蓝牙、打印服务等),减少系统启动时的资源消耗;三、Hadoop配置优化
针对HDFS、MapReduce、YARN三大组件调整参数,提升任务处理效率:
dfs.block.size):默认128MB,可根据数据规模调整为256MB或512MB,减少Map任务数量(每个块对应一个Map任务),降低元数据操作开销;dfs.replication):根据集群规模设置为2~3(测试环境可设为1),平衡数据可靠性和存储开销;dfs.namenode.handler.count、dfs.datanode.handler.count):默认10,可调整为20~30,提升节点并发处理能力。mapred.compress.map.output):设置为true,使用Snappy或LZO压缩算法,减少Map到Reduce阶段的网络传输量;mapreduce.task.io.sort.mb):默认100MB,可调整为200~500MB,增大排序缓冲区,减少磁盘溢写次数;wordcount中的combine函数),减少Reduce阶段输入数据量;mapred.map.tasks(通常为核心数×2)和mapred.reduce.tasks(通常为核心数×1~1.5),避免任务过多导致调度开销。yarn.nodemanager.resource.memory-mb):根据节点总内存设置(如8GB节点可设为6GB),预留2GB给系统和其他进程;yarn.scheduler.minimum-allocation-mb=256MB、yarn.scheduler.maximum-allocation-mb=4GB),避免内存浪费或溢出。四、数据本地化优化
确保计算任务尽可能运行在数据所在的节点,减少网络传输开销:
hadoop job -set-priority <job_id> VERY_HIGH提升关键任务的优先级,或通过mapreduce.job.locality.wait参数(默认3秒)调整等待本地数据的超时时间,避免因等待本地数据而延长任务启动时间。五、网络优化
提升集群节点间网络传输效率,减少数据传输瓶颈:
dfs.datanode.max.transfer.threads)和MapReduce Shuffle阶段启用压缩(mapreduce.shuffle.compress),减少网络传输的数据量;六、JVM调优
调整Java虚拟机(JVM)参数,优化内存管理和垃圾回收(GC)性能:
hadoop-env.sh中设置HADOOP_NAMENODE_OPTS="-Xmx3072m"(NameNode内存)、HADOOP_DATANODE_OPTS="-Xmx2048m"(DataNode内存),根据节点内存调整;hadoop-env.sh中添加-XX:+UseG1GC,减少GC停顿时间;-XX:MaxGCPauseMillis=100(设置最大GC停顿时间为100ms),平衡GC频率与停顿时间。七、监控与诊断
通过工具定位性能瓶颈,针对性优化:
八、其他优化建议
dfs.replication和dfs.namenode.replication.work.multiplier.per.iteration参数,将副本分布在不同机架的节点,提升数据可靠性和读取性能。