在 CentOS 7 系统中,如果需要修改 /etc/hosts 来补充 IP 地址与主机名的映射关系,前提是必须使用 root 权限编辑该文件,并按照“IP地址 主机名”的标准格式将记录追加进去。修改完成后通常会立即生效,但主要影响的是新建立的连接;同时还需要确认 /etc/nsswitch.conf 中的 hosts 一行包含 files,并注意避免 DNS 缓存或应用程序缓存带来的干扰。

修改 /etc/hosts 文件添加 IP 与主机名映射
在 CentOS 7 中,IP 与主机名映射通常不是依赖网络服务动态解析,而是通过本地 /etc/hosts 文件进行静态配置。它只影响当前主机对域名或主机名的本地解析,不涉及 DNS 服务器设置,也不会直接改变实际的网络路由。
通常直接编辑该文件后即可生效,无需重启网络服务,但需要注意:修改后仅对本机新发起的连接有效,例如 ping hadoop201、ssh hadoop201;而已经建立的 SSH 会话或正在运行的后台进程,通常不会自动重新读取该文件。
- 使用 root 权限打开文件:
vi /etc/hosts - 在文件末尾新增一行,格式为:
IP地址 主机名 [别名...],例如:192.168.144.201 hadoop201 - 确认 IP 地址真实可达(即该 IP 已正确配置在某块网卡上),否则即使
ping hadoop201能解析,也可能无法正常连接对应服务 - 不要删除原有的
127.0.0.1 localhost这一行,否则某些系统服务(如systemd-logind)可能出现启动异常
为什么改了 /etc/hosts 还 ping 不通主机名?
常见情况是写入完成后,执行 ping hadoop201 仍然提示 unknown host。这通常并不是因为文件没有保存成功,而更多是由于主机名解析顺序配置不正确,或 DNS 缓存、应用缓存造成干扰。
- 确认系统是否启用了 NetworkManager:它可能默认启用
dnsmasq或systemd-resolved,从而影响/etc/hosts的读取。可临时使用getent hosts hadoop201验证映射是否被正确识别 - 检查
/etc/nsswitch.conf中的hosts:配置,必须包含files(例如hosts: files dns),否则系统可能会跳过/etc/hosts - 某些 Java 应用(如 Hadoop)会缓存 DNS 解析结果,因此修改 hosts 后往往需要重启相关进程,单纯 reload 通常无效
- 如果还涉及 Windows 宿主机,也需要同步修改
C:WindowsSystem32driversetchosts,否则从宿主机执行ssh hadoop201仍可能失败
克隆虚拟机后必须同步修改的三处地方
在 VMware 或 VirtualBox 中克隆 CentOS 7 虚拟机后,仅仅修改 IP 地址通常还不够。如果 /etc/hosts 中的 IP 主机映射没有同步更新,很容易导致集群节点通信异常,例如 NameNode 无法正确找到 DataNode。
- 先修改网卡配置文件(如
/etc/sysconfig/network-scripts/ifcfg-ens33)中的IPADDR和GATEWAY - 再使用
hostnamectl set-hostname hadoop202修改主机名,相比直接编辑/etc/hostname更稳妥可靠 - 最后更新
/etc/hosts:删除旧的映射记录,新增192.168.144.202 hadoop202,同时保留其他节点的映射信息,例如192.168.144.201 hadoop201
如果以上任意一步遗漏,都可能造成 SSH 免密登录失败、ZooKeeper 节点无法互相发现,或者 HDFS 报出 Connection refused。这些问题表面上像是网络故障,实际上很多时候根源就在于 hosts 映射配置不一致。
