1. 基础环境配置
/etc/hosts文件中添加所有节点的IP地址与主机名对应关系(如192.168.1.1 namenode、192.168.1.2 datanode1),避免DNS解析延迟。ssh-keygen -t rsa生成密钥对,并将公钥复制到所有节点(ssh-copy-id datanode1),实现集群节点间无密码通信,便于故障转移。8020/9000、DataNode的50010/50020、SecondaryNameNode的50090),使用sudo ufw allow <port>/tcp命令放行,确保节点间通信不受阻碍。2. 核心配置文件优化
fs.defaultFS,如hdfs://namenode:8020)和临时目录(hadoop.tmp.dir,如/var/hadoop/tmp),临时目录需指向高性能存储(如SSD),避免因磁盘IO瓶颈影响性能。dfs.replication,生产环境建议设为3,可根据数据重要性调整);dfs.namenode.name.dir,如/var/hadoop/namenode)和DataNode数据存储路径(dfs.datanode.data.dir,如/var/hadoop/datanode),建议使用多个目录提升磁盘利用率;dfs.client.read.shortcircuit,设为true),减少客户端与DataNode间的网络传输延迟。datanode1、datanode2),确保NameNode能识别并管理所有数据节点。3. 高可用性(HA)配置
ha.zookeeper.quorum参数指向ZooKeeper集群地址(如datanode1:2181,datanode2:2181,datanode3:2181)。dfs.nameservices,如mycluster);dfs.ha.namenodes.mycluster,如nn1,nn2);dfs.namenode.rpc-address.mycluster.nn1、dfs.namenode.rpc-address.mycluster.nn2)和HTTP地址(dfs.namenode.http-address.mycluster.nn1、dfs.namenode.http-address.mycluster.nn2);dfs.namenode.shared.edits.dir,如qjournal://datanode1:8485;datanode2:8485;datanode3:8485/mycluster),使用Quorum Journal Manager(QJM)同步Active与Standby NameNode的状态。dfs.ha.automatic-failover.enabled,设为true),并配置故障转移控制器(dfs.ha.fencing.methods,如shell(/bin/kill -9 $(cat /var/run/hadoop-hdfs/namenode.pid))),防止脑裂问题。4. 性能调优技巧
dfs.block.size,如128MB或256MB),大块适合顺序读写(如日志文件),小块适合随机访问(如小文件),减少元数据开销。dfs.namenode.replication.min,设为1),加快数据写入速度;对于热数据,可临时提高副本数(如设为4),提升读取性能。hdfs-site.xml中启用机架感知(net.topology.script.file.name,如/etc/hadoop/topology.sh),将数据块的副本分布在不同机架的节点上,提高容错性和数据本地化率(减少跨机架网络传输)。hadoop-env.sh中设置HDFS_NAMENODE_OPTS、HDFS_DATANODE_OPTS,如-Xmx4g),避免因内存不足导致频繁GC;启用JVM重用(mapreduce.job.jvm.numtasks,设为大于1的值,如2),减少JVM启动开销。core-site.xml中配置高效的压缩算法(如Snappy,io.compression.codecs设为org.apache.hadoop.io.compress.SnappyCodec),减少数据存储空间和网络传输带宽,同时保证较低的解压延迟。5. 监控与维护
$HADOOP_HOME/logs目录,如namenode.log、datanode.log),通过日志定位节点故障、磁盘空间不足等问题。50070端口、ResourceManager的8088端口)监控集群状态(如节点健康度、数据块分布、资源利用率);或集成第三方工具(如Ganglia、Ambari),实现实时报警和趋势分析。hdfs snapshot命令),备份元数据;定期运行hdfs balancer命令平衡集群数据分布,避免某些节点负载过高;清理过期数据(通过hdfs dfs -expunge命令清空回收站),释放存储空间。