1. 系统级基础优化
在CentOS上部署Hadoop前,需通过系统配置降低资源占用、提升性能。最小化安装(仅选择必要软件包,如Hadoop依赖的Java、SSH等),避免无关服务消耗CPU、内存;关闭SELinux(修改/etc/selinux/config,设置SELINUX=disabled),减少其对Hadoop进程的访问控制开销;增大文件描述符上限(编辑/etc/security/limits.conf,添加* soft nofile 65536、* hard nofile 65536),满足Hadoop处理大规模文件的需求;调整内核参数(修改/etc/sysctl.conf,如net.core.somaxconn=1024提升TCP连接数、vm.swappiness=10减少内存交换),优化网络与内存性能。
2. HDFS资源管理配置
HDFS的资源管理核心在于存储资源分配与数据访问优化。调整块大小(修改hdfs-site.xml中的dfs.blocksize,推荐128MB或256MB),平衡大文件吞吐量与小文件查询效率;合理设置副本数(dfs.replication,生产环境通常为3,可根据数据重要性调整),兼顾数据可靠性与存储成本;配置多目录存储(dfs.datanode.data.dir,如/data1/datanode,/data2/datanode),将数据分散到多个磁盘,提升IO并行能力;启用数据本地化(修改yarn-site.xml中的yarn.scheduler.capacity.node-locality-delay,设置为3000ms以上),让计算任务优先分配到数据所在节点,减少网络传输延迟。
3. YARN资源调度优化
YARN是Hadoop的资源管理核心,需通过容器资源限制与队列策略实现高效调度。设置NodeManager资源(yarn-site.xml中的yarn.nodemanager.resource.memory-mb、yarn.nodemanager.resource.cpu-vcores),如分别设置为8192MB(内存)、4核(CPU),定义每个节点可分配的最大资源;配置容器资源边界(yarn.scheduler.minimum-allocation-mb、yarn.scheduler.maximum-allocation-mb),如最小1024MB、最大8192MB,避免单个任务占用过多资源或资源碎片化;选择调度器(yarn.resourcemanager.scheduler.class),常用CapacityScheduler(适合多租户,通过capacity-scheduler.xml配置队列容量,如root.default.capacity=50)或FairScheduler(适合公平分配,通过fair-scheduler.xml配置用户/队列权重);优化队列策略(如yarn.scheduler.capacity.root.queue1.capacity=30),为不同业务(如批处理、实时处理)分配专属队列,保障关键业务资源。
4. MapReduce任务资源优化
MapReduce的任务资源分配直接影响处理效率。设置任务内存(mapred-site.xml中的mapreduce.map.memory.mb、mapreduce.reduce.memory.mb),如Map任务1024MB、Reduce任务2048MB,根据任务复杂度调整;配置JVM堆内存(mapreduce.map.java.opts、mapreduce.reduce.java.opts),如-Xmx819m(Map任务最大堆内存为819MB,约为容器内存的80%,预留空间给系统与YARN开销);开启Map输出压缩(mapreduce.map.output.compress=true、mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec),减少Map与Reduce之间的网络传输量,提升Shuffle阶段效率。
5. 数据管理优化
数据存储与访问模式对资源利用率影响显著。避免小文件问题(通过Hadoop Archive工具归档小文件,或使用Spark的coalesce/repartition操作合并小文件),减少NameNode的元数据压力(每个小文件需存储元数据,大量小文件会导致NameNode内存溢出);优化数据存储策略(将热点数据(频繁访问)存储在SSD上,冷数据(很少访问)存储在HDD上),提升热点数据的访问速度;定期清理无用数据(通过hdfs dfs -rm命令删除过期数据,或设置HDFS生命周期策略(如hdfs dfs -expire)),释放存储空间。
6. 监控与运维优化
持续监控集群状态是保障资源高效利用的关键。使用监控工具(如Ganglia、Ambari、Prometheus+Granafa),监控集群的CPU、内存、磁盘I/O、网络带宽等指标,及时发现资源瓶颈(如某节点CPU利用率长期超过80%);定期性能测试(使用TestDFSIO工具测试HDFS读写性能,如hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*.jar TestDFSIO -write -nrFiles 10 -fileSize 1G,或使用TeraSort测试MapReduce排序性能),识别性能短板(如磁盘I/O慢导致写入延迟高);集群横向扩容(当现有节点资源耗尽时,增加NameNode(提升元数据处理能力)或DataNode(提升数据存储与处理能力)节点,如从10个节点扩展至20个节点),线性提升集群资源容量。