所有节点已安装同版本 CentOS 7/8,普通用户
hadoop
具备 sudo 权限。 创建hadoop用户
# 1. 创建用户并设置密码
sudo useradd -m -s /bin/bash hadoop
echo "hadoop:hadoop123" | sudo chpasswd # hadoop123密码可自行修改
# 2. 加入 wheel 组(CentOS/RHEL)
sudo usermod -aG wheel hadoop
# 3. 确保 wheel 组可免密 sudo(仅第一次需执行)
sudo sed -i 's/^# %wheel ALL=(ALL) NOPASSWD: ALL/%wheel ALL=(ALL) NOPASSWD: ALL/' /etc/sudoers
# 4. 验证
su - hadoop
sudo whoami # 预期输出 root
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
# 在 hadoop01 / hadoop02 / hadoop03 依次执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
for h in hadoop01 hadoop02 hadoop03; do
ssh-copy-id -o StrictHostKeyChecking=no $h
done
命令解释:
### 1. `ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa`
- `ssh-keygen`:生成 SSH 密钥对。
- `-t rsa`:指定算法为 RSA(老习惯,现在更推荐 ed25519,但 Hadoop 生态里 RSA 依旧常见)。
- `-P ''`:设置私钥的**密码短语(passphrase)为空**,即免输入。
- `-f ~/.ssh/id_rsa`:把私钥/公钥文件写到默认位置 `~/.ssh/id_rsa`(私钥)和 `~/.ssh/id_rsa.pub`(公钥)。
执行后,当前用户就有了自己的「钥匙」:
- 私钥:`~/.ssh/id_rsa`(留在本机,权限 600)
- 公钥:`~/.ssh/id_rsa.pub`(可以分发给别人)
---
### 2. `for h in hadoop01 hadoop02 hadoop03; do ... done`
- 一个 Bash 循环,把后面那行命令依次对 `hadoop01、hadoop02、hadoop03` 执行一遍。
---
### 3. `ssh-copy-id -o StrictHostKeyChecking=no $h`
- `ssh-copy-id`:把当前用户的公钥追加到远程主机 `$h` 的 `~/.ssh/authorized_keys` 文件里,实现免密登录。
- `-o StrictHostKeyChecking=no`:第一次连接时不提示 `The authenticity of host ... can't be established`,直接自动写入 known_hosts。
**注意**:生产环境如果担心中间人攻击,可以去掉此参数手动验证指纹;但在自动化脚本里很常见。
---
验证:
ssh hadoop02 'echo ✔ SSH 免密成功'
sudo mkdir -p /export/{servers,software}
#数据存放路径
mkdir -p /data1/hadoop/dn
mkdir -p /data2/hadoop/dn
mkdir -p /data3/hadoop/dn
sudo chown -R $(whoami) /export
scp
命令rz
(需 yum -y install lrzsz
)需要以下两个包:
jdk-8u461-Linux-x64.tar.gz
hadoop-2.10.2.tar.gz
保存为 install_jdk.sh
,所有节点执行:
#!/bin/bash
set -e
cd /export/software
tar -zxf jdk-8u461-linux-x64.tar.gz -C /export/servers/
mv /export/servers/jdk1.8.0_461 /usr/lib/jdk
cat >> /etc/profile.d/Java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
source /etc/profile.d/java.sh
java -version
执行权限:
chmod +x install_jdk.sh && ./install_jdk.sh
cd /export/software
tar -zxf hadoop-2.10.2.tar.gz -C /export/servers/
ln -snf /export/servers/hadoop-2.10.2 /export/servers/hadoop
cat >> /etc/profile.d/hadoop.sh <<'EOF'
export HADOOP_HOME=/export/servers/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
EOF
source /etc/profile.d/hadoop.sh
hadoop version
以下操作只在 hadoop01 执行,随后 7.7 节一键同步到其它节点。
# 直接替换文件中的 JAVA_HOME 一行
sed -i '/^export JAVA_HOME=/c\export JAVA_HOME=/usr/lib/jdk' \
$HADOOP_CONF_DIR/hadoop-env.sh
在 <configuration>
内填入:
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
0
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
1
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
2
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
3
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
4
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
5
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
6
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
7
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
8
sudo tee /etc/hosts <<'EOF'
192.168.227.132 hadoop01
192.168.227.133 hadoop02
192.168.227.134 hadoop03
EOF
9
# 在 hadoop01 / hadoop02 / hadoop03 依次执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
for h in hadoop01 hadoop02 hadoop03; do
ssh-copy-id -o StrictHostKeyChecking=no $h
done
命令解释:
### 1. `ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa`
- `ssh-keygen`:生成 SSH 密钥对。
- `-t rsa`:指定算法为 RSA(老习惯,现在更推荐 ed25519,但 Hadoop 生态里 RSA 依旧常见)。
- `-P ''`:设置私钥的**密码短语(passphrase)为空**,即免输入。
- `-f ~/.ssh/id_rsa`:把私钥/公钥文件写到默认位置 `~/.ssh/id_rsa`(私钥)和 `~/.ssh/id_rsa.pub`(公钥)。
执行后,当前用户就有了自己的「钥匙」:
- 私钥:`~/.ssh/id_rsa`(留在本机,权限 600)
- 公钥:`~/.ssh/id_rsa.pub`(可以分发给别人)
---
### 2. `for h in hadoop01 hadoop02 hadoop03; do ... done`
- 一个 Bash 循环,把后面那行命令依次对 `hadoop01、hadoop02、hadoop03` 执行一遍。
---
### 3. `ssh-copy-id -o StrictHostKeyChecking=no $h`
- `ssh-copy-id`:把当前用户的公钥追加到远程主机 `$h` 的 `~/.ssh/authorized_keys` 文件里,实现免密登录。
- `-o StrictHostKeyChecking=no`:第一次连接时不提示 `The authenticity of host ... can't be established`,直接自动写入 known_hosts。
**注意**:生产环境如果担心中间人攻击,可以去掉此参数手动验证指纹;但在自动化脚本里很常见。
---
0
在 C:\Windows\System32\drivers\etc\hosts
追加:
# 在 hadoop01 / hadoop02 / hadoop03 依次执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
for h in hadoop01 hadoop02 hadoop03; do
ssh-copy-id -o StrictHostKeyChecking=no $h
done
命令解释:
### 1. `ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa`
- `ssh-keygen`:生成 SSH 密钥对。
- `-t rsa`:指定算法为 RSA(老习惯,现在更推荐 ed25519,但 Hadoop 生态里 RSA 依旧常见)。
- `-P ''`:设置私钥的**密码短语(passphrase)为空**,即免输入。
- `-f ~/.ssh/id_rsa`:把私钥/公钥文件写到默认位置 `~/.ssh/id_rsa`(私钥)和 `~/.ssh/id_rsa.pub`(公钥)。
执行后,当前用户就有了自己的「钥匙」:
- 私钥:`~/.ssh/id_rsa`(留在本机,权限 600)
- 公钥:`~/.ssh/id_rsa.pub`(可以分发给别人)
---
### 2. `for h in hadoop01 hadoop02 hadoop03; do ... done`
- 一个 Bash 循环,把后面那行命令依次对 `hadoop01、hadoop02、hadoop03` 执行一遍。
---
### 3. `ssh-copy-id -o StrictHostKeyChecking=no $h`
- `ssh-copy-id`:把当前用户的公钥追加到远程主机 `$h` 的 `~/.ssh/authorized_keys` 文件里,实现免密登录。
- `-o StrictHostKeyChecking=no`:第一次连接时不提示 `The authenticity of host ... can't be established`,直接自动写入 known_hosts。
**注意**:生产环境如果担心中间人攻击,可以去掉此参数手动验证指纹;但在自动化脚本里很常见。
---
1
# 在 hadoop01 / hadoop02 / hadoop03 依次执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
for h in hadoop01 hadoop02 hadoop03; do
ssh-copy-id -o StrictHostKeyChecking=no $h
done
命令解释:
### 1. `ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa`
- `ssh-keygen`:生成 SSH 密钥对。
- `-t rsa`:指定算法为 RSA(老习惯,现在更推荐 ed25519,但 Hadoop 生态里 RSA 依旧常见)。
- `-P ''`:设置私钥的**密码短语(passphrase)为空**,即免输入。
- `-f ~/.ssh/id_rsa`:把私钥/公钥文件写到默认位置 `~/.ssh/id_rsa`(私钥)和 `~/.ssh/id_rsa.pub`(公钥)。
执行后,当前用户就有了自己的「钥匙」:
- 私钥:`~/.ssh/id_rsa`(留在本机,权限 600)
- 公钥:`~/.ssh/id_rsa.pub`(可以分发给别人)
---
### 2. `for h in hadoop01 hadoop02 hadoop03; do ... done`
- 一个 Bash 循环,把后面那行命令依次对 `hadoop01、hadoop02、hadoop03` 执行一遍。
---
### 3. `ssh-copy-id -o StrictHostKeyChecking=no $h`
- `ssh-copy-id`:把当前用户的公钥追加到远程主机 `$h` 的 `~/.ssh/authorized_keys` 文件里,实现免密登录。
- `-o StrictHostKeyChecking=no`:第一次连接时不提示 `The authenticity of host ... can't be established`,直接自动写入 known_hosts。
**注意**:生产环境如果担心中间人攻击,可以去掉此参数手动验证指纹;但在自动化脚本里很常见。
---
2