Hadoop集群需要稳定的网络环境,建议为所有节点(NameNode、DataNode、ResourceManager、NodeManager等)配置静态IP。
ip命令临时配置(重启失效),或编辑/etc/netplan/*.yaml文件永久生效(如01-netcfg.yaml)。示例配置:network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24] # 静态IP及子网掩码
gateway4: 192.168.1.1 # 网关
nameservers:
addresses: [8.8.8.8, 8.8.4.4] # DNS服务器
应用配置:sudo netplan apply。/etc/network/interfaces文件,添加以下内容:auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
重启网络:sudo systemctl restart networking。确保所有节点的主机名与IP地址一一对应,避免Hadoop通过主机名通信时解析失败。
/etc/hostname文件,设置节点主机名(如NameNode设为master,DataNode设为slave1)。/etc/hosts文件,添加所有节点的IP与主机名映射(所有节点配置需一致):192.168.1.100 master
192.168.1.101 slave1
192.168.1.102 slave2
保存后,可通过ping master命令验证解析是否正确。Hadoop集群中,NameNode需要通过SSH无密码登录到所有DataNode,ResourceManager需要无密码登录到所有NodeManager。
ssh-keygen -t rsa -P '' # 默认保存路径~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub | ssh user@slave1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
cat ~/.ssh/id_rsa.pub | ssh user@slave2 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ssh slave1 # 无需输入密码即可登录
ssh slave2
修改Hadoop配置文件(位于$HADOOP_HOME/etc/hadoop/目录),确保网络相关参数正确。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value> <!-- 替换为NameNode的实际主机名/IP -->
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/namenode</value> <!-- NameNode元数据存储路径 -->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/datanode</value> <!-- DataNode数据存储路径 -->
</property>
</configuration>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value> <!-- 替换为ResourceManager的实际主机名/IP -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml.template):指定MapReduce框架为YARN:<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Hadoop需要开放多个端口用于节点间通信,需配置防火墙允许这些端口的流量。
sudo ufw allow 9000/tcp # HDFS NameNode默认端口
sudo ufw allow 50070/tcp # HDFS Web UI
sudo ufw allow 8088/tcp # YARN ResourceManager Web UI
sudo ufw allow 50010/tcp # DataNode数据传输端口
sudo ufw allow 50020/tcp # DataNode IPC端口
sudo ufw enable # 启用防火墙
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --permanent --add-port=50070/tcp
sudo firewall-cmd --permanent --add-port=8088/tcp
sudo firewall-cmd --permanent --add-port=50010/tcp
sudo firewall-cmd --permanent --add-port=50020/tcp
sudo firewall-cmd --reload
hdfs namenode -format
start-dfs.sh # 启动HDFS(NameNode、DataNode)
start-yarn.sh # 启动YARN(ResourceManager、NodeManager)
hdfs dfsadmin -reportyarn node -listhttp://master:50070(HDFS)或http://master:8088(YARN)。~/.ssh/authorized_keys文件,且文件权限为600(chmod 600 ~/.ssh/authorized_keys)。core-site.xml中的fs.defaultFS配置是否正确,NameNode数据目录(dfs.namenode.name.dir)是否存在且具备读写权限。yarn-site.xml中的yarn.resourcemanager.hostname配置,ResourceManager服务是否正常启动(jps命令查看是否有ResourceManager进程)。