1. 硬件配置优化
2. 操作系统调优
/etc/sysctl.conf,增加fs.file-max(如800000)以提升同时打开文件的数量,增加net.core.somaxconn(如32767)以扩大网络连接队列;执行sudo sysctl -p使配置生效。sudo swapoff -a关闭swap,避免Hadoop守护进程因内存不足而交换到磁盘,导致性能骤降。blockdev --setra 8192 /dev/sdX(X为磁盘设备名)调整磁盘预读取缓冲区大小,减少磁盘寻道时间,提升IO效率。3. Hadoop参数调优
dfs.block.size):根据数据特征设置(如大文件场景设为128MB或256MB),减少元数据数量,提高并行处理能力。dfs.replication):根据数据重要性设置(如热数据设为3,冷数据设为2),平衡可靠性与存储开销。dfs.namenode.handler.count):设为20 * log2(集群规模)(如10节点集群设为60),提升NameNode处理客户端请求的能力。mapreduce.job.combine.class):在Map端聚合数据,减少Map与Reduce之间的数据传输量。mapreduce.map.memory.mb/mapreduce.reduce.memory.mb):根据任务复杂度分配(如Map任务设为4GB,Reduce任务设为8GB),避免内存溢出。mapreduce.task.io.sort.mb):扩大环形缓冲区(如设为100MB),减少磁盘IO次数。yarn.nodemanager.resource.memory-mb/yarn.nodemanager.resource.cpu-vcores):根据集群资源设置(如4GB内存、4核CPU),提高资源利用率。yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb):设置最小(如1GB)和最大(如8GB)资源分配,避免资源碎片化。4. JVM参数调优
hadoop-env.sh中设置HADOOP_OPTS,如-Xmx4g(MapReduce任务堆内存)或-Xmx8g(NameNode堆内存),避免频繁垃圾回收。-XX:+UseG1GC)替代传统Parallel GC,减少Full GC停顿时间,提升JVM响应速度。-XX:MaxGCPauseMillis=200(目标最大GC停顿时间),平衡吞吐量与延迟。5. 网络与数据优化
mapred-site.xml中设置io.compression.codecs为org.apache.hadoop.io.compress.SnappyCodec(Snappy兼顾速度与压缩比),减少网络传输和磁盘存储开销。dfs.replication和机架感知策略(topology.script.file.name),将计算任务分配到数据所在节点,减少跨节点数据传输。hdfs balancer命令调整各DataNode的磁盘使用率(如目标阈值为85%),避免部分节点成为热点。6. 监控与持续调优
http://namenode:8088)监控集群资源使用率(CPU、内存、磁盘)、任务执行状态(如Map/Reduce完成时间)。TestDFSIO(测试HDFS读写性能)、TeraSort(测试MapReduce排序性能)等工具,在优化前后进行对比,量化性能提升效果。