主机名为hadoop202,hadoop203,hadoop203但是出现xsync /opt/module/hadoop-3.1.3/etc/hadoop/ ==================== hadoop102 ==================== ssh: Could not resolve hostname hadoop102: Name or service not known ssh: Could not resolve hostname hadoop102: Name or service not known rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2] ==================== hadoop103 ==================== ssh: Could not resolve hostname hadoop103: Name or service not known ssh: Could not resolve hostname hadoop103: Name or service not known rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2] ==================== hadoop104 ==================== ssh: Could not resolve hostname hadoop104: Name or service not known ssh: Could not resolve hostname hadoop104: Name or service not known rsync: connection unexpectedly closed (0 bytes received so far)
时间: 2025-06-05 22:23:26 浏览: 26
### Hadoop 集群主机名解析失败及 rsync 连接异常解决方案
在 Hadoop-3.1.3 版本的集群环境中,如果遇到主机名解析失败或 `rsync connection unexpectedly closed` 以及 `Could not resolve hostname` 的问题,通常是由以下几个原因引起的:DNS 配置不正确、SSH 密钥配置不当、网络连通性问题或其他环境因素。以下是具体的排查和解决方法。
#### 1. 检查 `/etc/hosts` 文件
确保所有节点的 `/etc/hosts` 文件中包含正确的 IP 到主机名的映射关系。例如:
```plaintext
192.168.1.202 hadoop202
192.168.1.203 hadoop203
192.168.1.204 hadoop204
```
如果没有正确配置这些条目,可能会导致主机名无法解析的问题[^1]。
#### 2. 测试主机名解析功能
通过 `ping` 命令测试主机名是否能够被正确解析为 IP 地址。例如:
```bash
ping -c 1 hadoop202
ping -c 1 hadoop203
ping -c 1 hadoop204
```
如果返回的结果显示“unknown host”,则表明主机名未被正确定义或 DNS 解析服务不可用[^1]。
#### 3. 配置无密码 SSH 登录
确认已经完成从主节点到各子节点间的无密码 SSH 登录设置。具体操作包括生成密钥并将公钥复制到目标机器上:
```bash
ssh-keygen -t rsa
ssh-copy-id user@hadoop203
ssh-copy-id user@hadoop204
```
此步骤可避免每次执行命令时都需要手动输入密码的情况发生[^1]。
#### 4. 安装并验证 `rsync` 工具
确保所有的节点均已安装 `rsync` 工具。即使部分节点可能已预装该工具,也推荐统一运行以下命令以排除遗漏情况:
```bash
yum -y install rsync
```
只有当源端与目标端均安装了 `rsync` 后才能正常使用其功能[^2]。
#### 5. 修改 Shell 脚本逻辑增强鲁棒性
为了提高脚本健壮性和易读性,可以调整原脚本结构如下所示:
```bash
#!/bin/bash
# 参数校验
if [[ $# -eq 0 ]]; then
echo "Usage: $0 file_path"
exit 1
fi
file="$1"
filename=$(basename "$file")
directory=$(dirname "$file")
echo "Distributing ${filename}..."
# 用户身份获取
username=$(whoami)
# 循环分发文件至指定节点
for node in $(seq 202 204); do
target="hadoop${node}"
# 网络可达性检测
if ! ping -c 1 "${target}" >/dev/null; then
echo "[Error]: Host unreachable (${target})"
continue
fi
# 数据同步尝试
rsync -avz --progress "${file}" "${username}@${target}:${directory}/" && \
echo "[Success]: File distributed to ${target}" || \
echo "[Failure]: Failed distributing to ${target}"
done
```
#### 6. 排除其他潜在干扰项
- **防火墙规则冲突**:检查是否存在安全策略阻止了必要的端口通讯(默认情况下,SSH 使用的是 22 号端口)。可通过关闭防火墙暂时观察效果:
```bash
systemctl stop firewalld.service
```
- **SELinux 设置影响**:有时 SELinux 的强制模式也会阻碍正常的文件访问行为。切换成宽容模式再试一回:
```bash
setenforce 0
```
按照上述指导逐一排查即可定位并修复当前面临的技术难题。
---
###
阅读全文
相关推荐


















