/etc/security/limits.conf,设置ulimit -n 65535(永久生效),适应HDFS高并发需求。/etc/sysctl.conf,添加net.ipv4.tcp_tw_reuse = 1(复用TCP连接)、net.core.somaxconn = 65535(增加最大连接数)、net.ipv4.ip_local_port_range = 1024 65535(扩大端口范围);执行sysctl -p使配置生效。noop调度器(减少IO等待),HDD使用deadline调度器(平衡吞吐与延迟)。dfs.namenode.shared.edits.dir(如qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster),实现编辑日志的共享存储。ha.zookeeper.quorum(如zk1:2181,zk2:2181,zk3:2181),用于NameNode故障转移协调。dfs.client.failover.proxy.provider(如org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider),确保客户端自动切换Active/Standby NameNode;配置dfs.ha.fencing.methods(如sshfence),避免脑裂。通过YARN调度器将计算任务分配到数据所在节点(如配置mapreduce.job.locality.wait为3秒),减少网络传输开销;确保DataNode分布与数据热点匹配。
启用Snappy压缩(mapreduce.map.output.compress=true、mapreduce.output.fileoutputformat.compress=true),减少存储空间占用和网络传输时间(Snappy压缩比约3-4倍,CPU开销低)。
使用Hadoop Archive(HAR)工具合并小文件(如hadoop archive -archiveName myhar.har -p /input/dir /output/dir),减少NameNode元数据压力(NameNode元数据内存占用与文件数量成正比)。
配置块缓存(dfs.datanode.max.locked.memory,如4GB),将热点数据缓存在内存中,提高读取效率;启用dfs.datanode.drop.cache.behind.reads(读取后释放缓存),避免内存溢出。
配置机架拓扑(net.topology.script.file.name,如/etc/hadoop/conf/topology.sh),确保副本跨机架分布(如3副本分布在2个机架,每个机架至少1个副本),防止单机架故障导致数据不可用。
部署Prometheus+Grafana监控集群状态,重点关注以下指标:
fsimage和edits文件(如使用hdfs dfsadmin -saveNamespace),防止元数据丢失;hdfs dfs -expunge命令清理回收站中的过期文件(默认保留3天);