Hadoop 集群部署指南

1. 环境准备

1.1 服务器配置

  • bigdata1:

    • HDFS: Namenode
    • YARN: ResourceManager, NodeManager
  • bigdata2:

    • HDFS: Datanode
    • YARN: NodeManager
  • bigdata3:

    • HDFS: Secondary Namenode
    • YARN: NodeManager

1.2 软件准备

  • Hadoop: 版本 3.1.3
  • Java: JDK

2. 软件安装

2.1 解压并移动 Hadoop

1
2
tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module
mv /opt/module/hadoop-3.1.3 /opt/module/hadoop

2.2 配置环境变量

编辑 /etc/profile 文件,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
export JAVA_HOME=/opt/module/jdk
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME=/opt/module/hadoop

# 这些环境变量通常用于指定 Hadoop 进程运行的用户
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

然后执行:

1
source /etc/profile

3. 配置 Hadoop

3.1 配置 core-site.xml(nameNode)

编辑 ~/opt/module/hadoop/etc/hadoop/core-site.xml 文件:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/tmp</value>
</property>
</configuration>

3.2 配置 hdfs-site.xml

编辑 ~/opt/module/hadoop/etc/hadoop/hdfs-site.xml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/module/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/module/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
</configuration>

3.3 配置 yarn-site.xml

编辑 ~/opt/module/hadoop/etc/hadoop/yarn-site.xml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>

3.4 配置 mapred-site.xml

编辑 ~/opt/module/hadoop/etc/hadoop/mapred-site.xml 文件:

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

3.5 配置 workers

编辑 ~/opt/module/hadoop/etc/hadoop/workers 文件,添加:

1
2
3
master
slave1
slave2

3.6 配置 hadoop-env.sh

编辑 ~/opt/module/hadoop/etc/hadoop/hadoop-env.sh 文件,添加:

1
export JAVA_HOME=/opt/module/jdk

4. 分发配置文件和安装包

1
2
3
4
scp -r /opt/module/hadoop slave1:/opt/module
scp -r /opt/module/hadoop slave2:/opt/module
scp /etc/profile slave1:/etc/profile
scp /etc/profile slave2:/etc/profile

5. 格式化 Namenode

master 主机上执行:

1
hdfs namenode -format

6. 启动 Hadoop 集群

6.1 启动 HDFS

master 上执行:

一键启动命令:

1
2
start-all.sh

分布启动:

1
2
cd /opt/module/hadoop/sbin
./start-dfs.sh

slave1slave2 上执行:

1
2
cd /opt/module/hadoop/sbin
jps

6.2 启动 YARN

master 上执行:

1
2
cd /opt/module/hadoop/sbin
./start-yarn.sh

slave1slave2 上执行:

1
2
cd /opt/module/hadoop/sbin
jps

7. 其他脚本配置

如果需要自定义脚本,可以编辑 start-dfs.sh, stop-dfs.sh, start-yarn.sh, 和 stop-yarn.sh 文件。注意脚本中可能需要配置环境变量和用户设置。

免密登录

1. 生成 SSH 密钥对

如果您还没有 SSH 密钥对,可以通过以下命令生成一个:

1
ssh-keygen -t rsa -b 4096 

解释:

  • -t rsa:指定密钥类型为 RSA。
  • -b 4096:设置密钥长度为 4096 位。

在执行命令时,系统会提示您输入文件名和密码。默认情况下,密钥文件将保存在 ~/.ssh/id_rsa~/.ssh/id_rsa.pub。您可以直接按回车接受默认路径,也可以指定其他路径。建议设置密码以增加安全性,但如果希望完全免密,则可以留空。

2. 将公钥复制到远程服务器

使用 ssh-copy-id 命令将您的公钥复制到远程服务器的授权密钥文件中:

1
ssh-copy-id username@remote_host

替换 usernameremote_host 为您的远程服务器用户名和主机名或 IP 地址。

如果 ssh-copy-id 不可用,您可以手动完成此操作:

  1. 显示公钥内容:

    1
    cat ~/.ssh/id_rsa.pub
  2. 在远程服务器上创建 .ssh 目录(如果尚不存在)并将公钥内容追加到 authorized_keys 文件中:

    1
    2
    3
    ssh username@remote_host
    mkdir -p ~/.ssh
    cat >> ~/.ssh/authorized_keys

    粘贴公钥内容,然后按 Ctrl+D 保存。

  3. 设置正确的权限:

    1
    2
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

3. 验证免密登录

尝试从本地机器 SSH 到远程服务器,检查是否可以免密登录:

1
ssh username@remote_host

如果设置正确,您应该能够直接登录而不需要输入密码。

4. 配置 SSH 客户端(可选)

如果您使用非默认的密钥文件或需要指定其他 SSH 选项,可以编辑或创建 ~/.ssh/config 文件:

1
2
3
4
Host remote_host
HostName remote_host
User username
IdentityFile ~/.ssh/id_rsa

这将使得在连接到 remote_host 时使用指定的密钥文件和用户名。

5. 解决常见问题

  • 确保 SSH 服务正在运行:在远程服务器上,确保 SSH 服务(通常是 sshd)正在运行。
  • 检查权限:确保 .ssh 目录和 authorized_keys 文件的权限设置正确。
  • 确认公钥复制成功:确保公钥正确地复制到 authorized_keys 文件中,没有多余的空行或字符。

通过以上步骤,您可以实现免密登录,提高日常操作的效率和安全性。