一、硬件配置优化
二、操作系统调优
/etc/sysctl.conf文件,优化网络和文件系统性能。关键参数包括:
net.core.somaxconn=65535:增加TCP连接队列长度,避免高并发时连接拒绝;net.ipv4.tcp_max_syn_backlog=65535:提升SYN包队列容量,加快TCP连接建立;vm.swappiness=10:降低系统使用交换分区的倾向,优先使用物理内存。sysctl -p使配置生效。noatime挂载选项(在/etc/fstab中添加defaults,noatime),减少文件访问时间的更新操作,降低磁盘I/O负载;dfs.namenode.name.dir)与DataNode数据目录(dfs.datanode.data.dir)放在不同物理磁盘上,避免I/O竞争。三、HDFS核心参数调优
dfs.namenode.handler.count(默认10)和dfs.datanode.handler.count(默认10),根据集群规模增大(如100节点集群设置为50),提升并发处理能力。hadoop-env.sh中的HADOOP_NAMENODE_OPTS和HADOOP_DATANODE_OPTS,例如:-XX:+UseG1GC -XX:MaxGCPauseMillis=100,减少GC停顿时间,避免影响服务响应。四、数据本地化与压缩
NodeLocal优先),让计算任务尽量在数据所在节点执行,减少网络传输。确保mapreduce.job.locality.wait参数(默认3秒)合理,避免过长等待导致的任务延迟。hdfs-site.xml,添加:<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.streams.cache.size</name>
<value>1000</value>
</property>
允许客户端直接从本地DataNode读取数据,绕过DataNode的网络栈,提升读取性能(尤其适合小文件)。mapred-site.xml,添加:<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
注意:压缩会增加CPU开销,需根据集群资源情况权衡。五、高可用性(HA)配置
hdfs-site.xml,添加:<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journalnode/data</value>
</property>
启动JournalNode:hdfs --daemon start journalnode。core-site.xml,添加:<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
启动ZooKeeper:zkServer.sh start。hdfs-site.xml,添加:<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>nn1_host:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>nn2_host:8020</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
格式化NameNode:hdfs namenode -format,启动JournalNode和NameNode,完成HA配置。六、监控与维护
fs.trash.interval设置,如7天),释放存储空间;