使用scp命令拷贝hadoop100中文件到其他虚拟机中
以下是使用 scp 命令将 hadoop100 主机中的文件拷贝到其他虚拟机的操作步骤(假设其他主机名为 hadoop101 、 hadoop102 ,系统为 Linux):
1. 基本语法
bash
scp [选项] 源文件路径 目标主机用户名@目标主机IP:目标路径
- 选项:
- -r :递归拷贝目录(含子文件)。
- -p :保留文件属性(如权限、时间戳)。
- -i :指定私钥文件(用于 SSH 免密登录)。
2. 示例场景:拷贝单个文件
从 hadoop100 拷贝文件到 hadoop101
bash
# 拷贝本地文件 /data/file.txt 到 hadoop101 的 /data/ 目录
scp /data/file.txt hadoop@hadoop101:/data/
# 若目标主机 IP 为 192.168.1.101(非主机名)
scp /data/file.txt hadoop@192.168.1.101:/data/
- 首次连接需输入目标主机密码(若已配置 SSH 免密则无需输入)。
3. 示例场景:拷贝目录(含子文件)
从 hadoop100 拷贝目录到 hadoop102
bash
scp -r /data/logs hadoop@hadoop102:/data/
- -r 选项确保目录及其内容递归拷贝。
4. 反向操作:从目标主机拉取文件到 hadoop100
bash
# 从 hadoop101 拉取 /data/report.csv 到 hadoop100 的 /tmp/ 目录
scp hadoop@hadoop101:/data/report.csv /tmp/
5. 配置 SSH 免密登录(推荐)
为避免每次拷贝都输入密码,可配置集群内 SSH 互信:
1. 在 hadoop100 生成密钥对:
bash
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
2. 将公钥分发到目标主机(如 hadoop101、hadoop102):
bash
ssh-copy-id hadoop@hadoop101
ssh-copy-id hadoop@hadoop102
3. 验证免密登录:
bash
ssh hadoop101 "echo Hello" # 应直接执行命令,无需密码
6. 批量拷贝文件到多台主机(脚本示例)
创建脚本 scp_to_cluster.sh ,批量将文件拷贝到集群各节点:
bash
#!/bin/bash
files=("/data/config.txt" "/data/scripts") # 需拷贝的文件/目录列表
hosts=("hadoop101" "hadoop102") # 目标主机列表
for file in "${files[@]}"; do
for host in "${hosts[@]}"; do
echo "正在拷贝 ${file} 到 ${host}..."
scp -r ${file} hadoop@${host}:/data/
done
done
- 执行脚本前需赋予权限:
bash
chmod +x scp_to_cluster.sh
./scp_to_cluster.sh
关键注意事项
1. 路径格式:
- 源路径为 hadoop100 的本地路径,目标路径为远程主机的路径。
- 目标路径需确保远程用户有写入权限(如使用 sudo 需调整命令)。
2. 防火墙与端口:
- 确保目标主机开启 SSH 服务(端口 22),若关闭需手动开启:
bash
sudo systemctl start sshd # CentOS/RHEL
sudo ufw allow ssh # Ubuntu(防火墙允许 SSH)
3. 大数据文件优化:
- 若文件较大,可使用 -C 选项压缩传输:
bash
scp -C /data/bigfile.tar.gz hadoop@hadoop101:/data/
通过以上步骤,可高效利用 scp 实现集群内文件同步,结合 SSH 免密和脚本可进一步提升自动化程度。