CentOS7 环境下 Hadoop 3.3.4 高可用集群部署实战(1 NameNode + 3 DataNode)

1. 环境准备与规划:为你的Hadoop集群打好地基

搭建一个稳定可靠的Hadoop集群,就像盖房子,地基打得好,后面才能省心。这次我们用的是三台CentOS 7的服务器,规划成一个NameNode(主节点)和两个DataNode(数据节点)。很多新手朋友一开始就急着敲命令,结果网络不通、权限不对,折腾半天又得重来。我建议你先花十分钟,把下面这几步规划清楚,后面能少踩80%的坑。

首先,你得明确每台机器的角色。我们这里用三台机器,IP和主机名分配如下:

  • Master (192.168.21.25):这台机器身兼多职,它既是NameNode(负责管理文件系统的元数据),也是ResourceManager(负责YARN的资源调度)。简单理解,它就是集群的“大脑”和“调度中心”。
  • Slave01 (192.168.21.26):第一个DataNode,负责存储实际的数据块,同时也是SecondaryNameNode。这个SecondaryNameNode可不是NameNode的热备,它主要帮NameNode做检查点合并,防止编辑日志文件过大,你可以把它理解为“秘书”,帮忙整理文件。
  • Slave02 (192.168.21.27):第二个DataNode,纯纯的数据存储节点。

为什么是3个DataNode?因为Hadoop默认的数据副本数就是3,这样一份数据会在集群里存三份,任何一台机器挂了,数据都不会丢,可靠性非常高。这个架构对于学习和中小规模生产环境都足够了。

硬件方面,CentOS 7建议最小化安装,干净。内存我给个参考:Master节点建议4G以上,Slave节点2G以上。磁盘空间嘛,DataNode当然是越大越好,但学习环境每台有个20G也够用了。最关键的是网络,确保这三台机器在同一个局域网内,能互相ping通,防火墙要么关闭,要么把需要用到的端口(像9000,50070,8088这些)都打开。

注意:在生产环境,NameNode和ResourceManager通常会分开部署在不同的机器上,以避免单点故障和资源竞争。我们这里为了简化学习和测试,放在了一起。如果你资源充足,用四台机器来部署是更理想的方案。

2. 基础系统配置:让三台机器“认亲”并畅通无阻

机器准备好了,但它们现在还是“陌生人”,互相不认识。我们得让它们在一个“家庭”里,并且能免密码串门。这一步是后续所有操作的基础,务必做扎实。

2.1 配置静态主机名与Hosts映射

CentOS 7默认的主机名是localhost.localdomain,这不利于我们管理。我们先给每台机器起个固定的、有意义的名字。在每台服务器上执行:

# 在Master节点上
hostnamectl set-hostname master
# 在Slave01节点上
hostnamectl set-hostname slave01
# 在Slave02节点上
hostnamectl set-hostname slave02

设置完后,断开SSH重新连接,或者执行bash让新主机名生效,用hostname命令检查一下。接下来是关键的一步:修改/etc/hosts文件。这个文件相当于集群内部的“通讯录”,通过主机名就能找到对应的IP地址,比直接记IP方便多了,而且配置文件里用主机名也更清晰。

不要在每台机器上只写自己的信息! 我见过有人只在Master的hosts里加了Master的映射,结果根本连不上Slave。正确的做法是,三台机器的/etc/hosts文件内容要完全一致。我们统一编辑这个文件:

vi /etc/hosts

在文件末尾添加以下三行(请确保IP地址和你机器的实际IP一致):

192.168.21.25 master
192.168.21.26 slave01
192.168.21.27 slave02

编辑完成后,保存退出。然后,分别在每台机器上,用ping命令测试一下连通性,这是验证配置是否成功的土办法但最有效:

ping master -c 3
ping slave01 -c 3
ping slave02 -c 3

如果都能收到回复,说明网络和主机名解析都正常了。这里有个小技巧,你可以用scp命令把Master配置好的hosts文件直接拷贝到两个Slave节点,省去重复编辑的麻烦:scp /etc/hosts root@slave01:/etc/scp /etc/hosts root@slave02:/etc/

2.2 配置SSH免密登录:实现“一把钥匙开所有门”

Hadoop集群启动和管理时,主节点(Master)需要能无密码登录到所有从节点(Slave)去启动进程。如果每次都要输密码,那全自动启动就无从谈起了。配置SSH免密登录,就是给Master配一把万能钥匙。

所有后续操作,如无特别说明,都在Master节点上进行。 首先,我们生成RSA密钥对:

# 切换到当前用户的.ssh目录,如果不存在会自动创建
cd ~/.ssh
# 如果之前生成过密钥,可以先删除(可选)
rm -f id_rsa id_rsa.pub
# 生成密钥对,执行下面命令后,连续按三次回车即可,不要设置密码短语(passphrase)
ssh-keygen -t rsa

生成后,id_rsa是私钥,自己保管好;id_rsa.pub是公钥,可以发给别人。接下来,我们把公钥追加到本机的授权文件里,实现Master自己能无密码登录自己:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 修改authorized_keys文件的权限,这一步非常重要,权限不对会导致免密失败
chmod 600 ~/.ssh/authorized_keys

现在测试一下:ssh master,应该不需要输入密码就直接登录了(第一次可能会问是否信任主机,输入yes就行)。接下来,要把Master的公钥分发到两个Slave节点。我们采用一个更稳妥的方法,先手动创建目录,再拷贝:

# 在Slave01和Slave02上创建.ssh目录(如果不存在)
ssh slave01 "mkdir -p ~/.ssh"
ssh slave02 "mkdir -p ~/.ssh"

# 将Master的公钥文件拷贝到Slave节点
scp ~/.ssh/id_rsa.pub root@slave01:~/.ssh/master.pub
scp ~/.ssh/id_rsa.pub root@slave02:~/.ssh/master.pub

# 分别登录到Slave节点,将公钥加入授权文件
ssh slave01 "cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
ssh slave02 "cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

最后,在Master上测试免密登录是否成功:

ssh slave01
# 登录成功后,执行个简单命令如 `hostname`,确认是slave01,然后退出
exit
ssh slave02
exit

如果能顺畅登录退出,恭喜你,SSH通道已经打通了!这一步的坑主要在于文件权限(authorized_keys必须是600)和目录是否存在,按上面的步骤走,基本没问题。

3. JD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值