一、硬件配置优化
二、操作系统调优
sudo swapoff -a临时禁用,并修改/etc/fstab文件永久关闭(注释掉swap相关行)。/etc/sysctl.conf,增加以下配置以提升并发处理能力:net.core.somaxconn = 32767 # 增加网络连接队列长度
fs.file-max = 800000 # 提高系统最大文件描述符数
net.core.rmem_default = 67108864 # 增加TCP接收缓冲区大小
net.core.wmem_default = 67108864 # 增加TCP发送缓冲区大小
执行sudo sysctl -p使配置生效;同时修改/etc/security/limits.conf,为Hadoop用户(如hadoop)设置更高的文件描述符限制(如hadoop hard nofile 65536)。vm.overcommit_memory为2(限制内存分配不超过物理内存+swap总和),vm.overcommit_ratio为2(设置超出比率),避免内存溢出。三、Hadoop配置参数调优
dfs.block.size(大文件推荐128MB或256MB,小文件推荐64MB),减少元数据数量。dfs.replication默认3,可根据数据重要性(如热数据设为3,冷数据设为2)或存储成本调整,平衡可靠性与存储开销。dfs.namenode.handler.count设置为20 * log2(集群规模)(如10节点集群设为60),提升NameNode处理客户端请求的能力。mapreduce.job.combine.class设置为org.apache.hadoop.mapreduce.Reduce),减少Map与Reduce之间的数据传输量。mapreduce.map.output.compress设为true,mapreduce.map.output.compress.codec设为org.apache.hadoop.io.compress.SnappyCodec,降低网络传输开销。mapreduce.reduce.shuffle.parallelcopies(增加Reduce拉取Map输出的并行数,如设为20)、mapreduce.task.io.sort.mb(增加Map端排序内存,如设为100MB),提升Shuffle效率。yarn.nodemanager.resource.memory-mb(设为节点内存的80%,如16GB内存设为12GB)、yarn.nodemanager.resource.cpu-vcores(设为节点CPU核心数的80%,如8核设为6核),合理分配NodeManager资源。yarn.scheduler.minimum-allocation-mb(最小Container内存,如1GB)、yarn.scheduler.maximum-allocation-mb(最大Container内存,如8GB),避免资源碎片化。CapacityScheduler适合多租户共享集群,公平调度器FairScheduler适合公平分配资源)。四、JVM参数调优
OutOfMemoryError;在hadoop-env.sh中添加:export HADOOP_OPTS="-Xmx4g -Xms4g -XX:MaxGCPauseMillis=200 -XX:+UseG1GC"
(-Xmx/-Xms设为相同值减少GC次数,-XX:+UseG1GC使用G1垃圾收集器提升GC效率)。-XX:+UseParallelGC),减少Full GC停顿时间。五、数据本地化与压缩
dfs.network.script配置机架感知脚本),将计算任务分配给数据所在节点,减少跨节点数据传输(数据本地化率需达到80%以上)。mapred-site.xml中配置:<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
压缩可减少磁盘存储空间(如Snappy压缩比约2-3倍)和网络传输时间(如Snappy压缩后传输速率提升30%-50%)。六、监控与运维优化
hdfs balancer命令平衡各DataNode磁盘利用率(阈值设为10%以内),避免数据倾斜导致部分节点负载过高。log4j.properties中设置maxFileSize和maxBackupIndex),定期清理旧日志(如保留7天),节省磁盘空间。hadoop job -list查看运行中任务,用hadoop job -kill <job_id>终止长时间运行(如超过24小时)或失败的任务,释放资源。