HDFS(Hadoop分布式文件系统)的正常运行依赖Linux网络的稳定配置,主要包括Linux系统网络基础设置和Hadoop网络参数调优两部分。以下是详细步骤:
静态IP是集群节点间通信的基础,需修改网络接口配置文件(路径因发行版而异):
/etc/sysconfig/network-scripts/ifcfg-ens33(ens33为网卡名,可通过ip addr查看),添加/修改以下内容:BOOTPROTO=static # 使用静态IP IPADDR=192.168.1.100 # 集群节点唯一IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.1.1 # 网关地址 DNS1=8.8.8.8 # 主DNS服务器 DNS2=8.8.4.4 # 备用DNS服务器 ONBOOT=yes # 开机自动启用网络 /etc/netplan/00-installer-config.yaml,添加以下内容:network: version: 2 ethernets: ens33: dhcp4: no # 禁用DHCP addresses: [192.168.1.100/24] # IP地址及子网掩码 gateway4: 192.168.1.1 # 网关 nameservers: addresses: [8.8.8.8, 8.8.4.4] # DNS服务器 修改后重启网络服务:
# CentOS/RHEL sudo systemctl restart network # Ubuntu/Debian sudo netplan apply 验证IP配置:ip addr show ens33。
hostnamectl命令设置唯一主机名(如namenode、datanode1):sudo hostnamectl set-hostname namenode /etc/hosts文件,添加集群所有节点的IP与主机名映射(避免依赖外部DNS):192.168.1.100 namenode 192.168.1.101 datanode1 192.168.1.102 datanode2 验证解析:ping namenode。
防火墙和SELinux会阻止Hadoop节点间的通信,测试时可暂时关闭:
# CentOS/RHEL(使用firewalld) sudo systemctl stop firewalld sudo systemctl disable firewalld # Ubuntu(使用ufw) sudo ufw disable /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后执行setenforce 0。Hadoop集群需要节点间无密码通信(如NameNode向DataNode发送指令),需生成SSH密钥并分发:
# 生成RSA密钥对(默认保存在~/.ssh/id_rsa) ssh-keygen -t rsa -P "" # 将公钥复制到所有节点(包括自身) ssh-copy-id root@namenode ssh-copy-id root@datanode1 ssh-copy-id root@datanode2 # 测试免密登录 ssh namenode # 无需输入密码 ssh datanode1 Hadoop的核心网络配置集中在core-site.xml和hdfs-site.xml文件中(路径:$HADOOP_HOME/etc/hadoop/)。
core-site.xml(核心文件系统配置)core-site.xml定义了HDFS的默认文件系统和RPC通信地址,关键配置如下:
<configuration> <!-- 指定HDFS的默认文件系统URI(namenode的IP/主机名:端口) --> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> <!-- 生产环境建议使用域名 --> </property> <!-- Hadoop临时目录(用于存储中间数据) --> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> <!-- 路径需提前创建并授权 --> </property> </configuration> hdfs-site.xml(HDFS特定配置)hdfs-site.xml配置了HDFS的副本数、数据目录、RPC处理线程数等关键参数,关键配置如下:
<configuration> <!-- 数据块副本数(生产环境建议3,测试环境可设为1) --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- NameNode数据存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop/namenode</value> <!-- 路径需提前创建并授权 --> </property> <!-- DataNode数据存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop/datanode</value> <!-- 路径需提前创建并授权 --> </property> <!-- NameNode RPC处理线程数(处理客户端请求的并发数,根据集群规模调整) --> <property> <name>dfs.namenode.handler.count</name> <value>100</value> </property> <!-- DataNode RPC处理线程数(处理客户端读写请求的并发数) --> <property> <name>dfs.datanode.handler.count</name> <value>100</value> </property> <!-- DataNode最大数据传输线程数(提升数据传输效率) --> <property> <name>dfs.datanode.max.transfer.threads</name> <value>4096</value> </property> <!-- 是否检查DataNode的IP与主机名是否匹配(生产环境建议true,避免DNS问题) --> <property> <name>dfs.namenode.datanode.registration.ip-hostname-check</name> <value>true</value> </property> </configuration> 编辑/etc/profile文件,添加Hadoop环境变量(将/opt/hadoop替换为实际安装路径):
export HADOOP_HOME=/opt/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 使配置生效:source /etc/profile。
hdfs namenode -format start-dfs.sh jps命令查看NameNode和DataNode进程是否启动(NameNode节点显示NameNode,DataNode节点显示DataNode)。http://namenode:50070。50010-50020、50070-50080等端口);使用域名代替IP地址,避免主机名解析问题。core-site.xml和hdfs-site.xml配置需保持一致,避免通信错误。