关于后端:hdfs集群的扩容和缩容

39次阅读

共计 6347 个字符,预计需要花费 16 分钟才能阅读完成。

1、背景

当咱们的 hadoop 集群运行了一段时间之后,原有的数据节点的容量曾经不能满足咱们的存储了,这个时候就须要往集群中减少新的数据节点。此时咱们就须要动静的对 hdfs 集群进行扩容操作 ( 节点退役)。

2、集群黑白名单

hdfs 集群中是存在 黑名单 白名单 的。

黑名单: 该文件蕴含 不容许 连贯到 namenode 的主机列表。必须指定文件的残缺路径名 。如果该值 为空 ,则示意不排除任何主机。
白名单: 该文件蕴含 容许 连贯到 namenode 的主机列表。必须指定文件的残缺路径名 。如果该值 为空,则容许所有主机

黑白名单配置

vim hdfs-site.xml

<!-- 配置黑名单,应用黑名单能够下线集群  -->
<property>
    <name>dfs.hosts.exclude</name>
    <value>/opt/bigdata/hadoop-3.3.4/etc/hadoop/blacklist.hosts</value>
</property>
<!-- 配置白名单,只有白名单中的节点才能够拜访 namenode  -->
<property>
    <name>dfs.hosts</name>
    <value>/opt/bigdata/hadoop-3.3.4/etc/hadoop/whitelist.hosts</value>
</property>

留神: 第一次配置黑白名单时,须要重启集群才能够失效,之后批改了黑白名单文件,只须要执行 hdfs dfsadmin -refreshNodes命令即可。

3、筹备一台新的机器并配置好 hadoop 环境

3.1 咱们现有的集群布局

参考此文章的集群搭建

3.2 筹备一台新的机器

  • ip 地址:192.168.121.143
  • 主机名:hadoop04

3.2.1 查看新机器的 ip

3.2.2 批改主机名和 host 映射

[root@appbasic ~]# vim /etc/hostname
[root@appbasic ~]# cat /etc/hostname
hadoop04
[root@appbasic ~]# vim /etc/hosts
[root@appbasic ~]# cat /etc/hosts
192.168.121.140 hadoop01
192.168.121.141 hadoop02
192.168.121.142 hadoop03
192.168.121.143 hadoop04
[root@appbasic ~]#

3.2.3 配置工夫同步

hadoop集群中的各个机器之间的工夫最好都保持一致

[root@hadoop04 ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@hadoop04 ~]# yum install ntp
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base                                                                                                                                                                                           | 3.6 kB  00:00:00
extras                                                                                                                                                                                         | 2.9 kB  00:00:00
updates                                                                                                                                                                                        | 2.9 kB  00:00:00
(1/2): extras/7/aarch64/primary_db                                                                                                                                                             | 252 kB  00:00:00
(2/2): updates/7/aarch64/primary_db                                                                                                                                                            | 3.5 MB  00:00:03
软件包 ntp-4.2.6p5-29.el7.centos.2.aarch64 已装置并且是最新版本
毋庸任何解决
[root@hadoop04 ~]# systemctl enable ntpd
[root@hadoop04 ~]# service ntpd restart
Redirecting to /bin/systemctl restart ntpd.service
[root@hadoop04 ~]# ntpdate asia.pool.ntp.org
29 Mar 21:42:52 ntpdate[1697]: the NTP socket is in use, exiting
[root@hadoop04 ~]# /sbin/hwclock --systohc
[root@hadoop04 ~]# timedatectl
      Local time: 三 2023-03-29 21:43:03 CST
  Universal time: 三 2023-03-29 13:43:03 UTC
        RTC time: 三 2023-03-29 13:43:03
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@hadoop04 ~]# timedatectl set-ntp true
[root@hadoop04 ~]#

3.2.4 敞开防火墙

[root@hadoop04 ~]# systemctl stop firewalld
systemctl stop firewalld
[root@hadoop04 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@hadoop04 ~]#

3.2.5 新建 hadoop 部署用户

[root@hadoop04 ~]# useradd hadoopdeploy
[root@hadoop04 ~]# passwd hadoopdeploy
更改用户 hadoopdeploy 的明码。新的 明码:有效的明码:明码蕴含用户名在某些中央
从新输出新的 明码:passwd:所有的身份验证令牌曾经胜利更新。[root@hadoop04 ~]# vim /etc/sudoers
[root@hadoop04 ~]# cat /etc/sudoers | grep hadoopdeploy -C 3

## Same thing without a password
# %wheel    ALL=(ALL)    NOPASSWD: ALL
hadoopdeploy    ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
[root@hadoop04 ~]#

3.2.6 复制 hadoop04 机器上的 /etc/hosts 文件到集群的另外 3 台机器上

[root@hadoop04 ~]# scp /etc/hosts root@hadoop01:/etc/hosts
[root@hadoop04 ~]# scp /etc/hosts root@hadoop02:/etc/hosts
[root@hadoop04 ~]# scp /etc/hosts root@hadoop03:/etc/hosts

3.2.7 配置集群间的免密登录

此处配置 namenode(hadoop01)hadoop04 之间的免密登录。

[hadoopdeploy@hadoop01 ~]$ ssh-copy-id hadoop04
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hadoopdeploy/.ssh/id_rsa.pub"
The authenticity of host 'hadoop04 (192.168.121.143)' can't be established.
ECDSA key fingerprint is SHA256:4GL0zHVCdSl3czA0wqcuLT60lUljyEq3DqwPFxNwYsE.
ECDSA key fingerprint is MD5:3e:42:a6:50:0d:fb:f0:41:a8:0d:fb:cc:fd:20:2c:c8.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
hadoopdeploy@hadoop04's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh'hadoop04'"
and check to make sure that only the key(s) you wanted were added.

[hadoopdeploy@hadoop01 ~]$

3.2.8 将 namenode 上的 hadoop 复制到 hadoop04 上

[root@hadoop04 ~]# sudo mkdir /opt/bigdata
mkdir: cannot create directory‘/opt/bigdata’: No such file or directory
[root@hadoop04 ~]# sudo mkdir -p /opt/bigdata
[root@hadoop04 ~]# sudo chown -R hadoopdeploy:hadoopdeploy /opt/bigdata/
[root@hadoop04 ~]# su - hadoopdeploy
Last login: Wed Mar 29 22:19:54 CST 2023 on pts/0
[hadoopdeploy@hadoop04 ~]$ scp -r  hadoopdeploy@hadoop01:/opt/bigdata/hadoop-3.3.4/ /opt/bigdata/
[hadoopdeploy@hadoop04 hadoop]$ rm -rvf /opt/bigdata/hadoop-3.3.4/data/* rm -rvf /opt/bigdata/hadoop-3.3.4/logs/*

留神 目录的创立用户、执行 scp 命令的用户

留神: 如果 hadoop-3.3.4 目录下存在咱们之前配置的数据目录,则须要删除,否则启动这个节点的时候会有问题。日志目录也相应的删除

3.2.9 配置 workers 文件

配置这个文件是为了不便集群的一键启动。

[hadoopdeploy@hadoop04 hadoop]$ vim /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers
[hadoopdeploy@hadoop04 hadoop]$ cat /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers
hadoop01
hadoop02
hadoop03
hadoop04
[hadoopdeploy@hadoop04 hadoop]$

留神: 将这个 workers 文件散发到集群的各个机器上。

[hadoopdeploy@hadoop04 hadoop]$ scp /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers hadoopdeploy@hadoop01:/opt/bigdata/hadoop-3.3.4/etc/hadoop/workers
[hadoopdeploy@hadoop04 hadoop]$ scp /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers hadoopdeploy@hadoop02:/opt/bigdata/hadoop-3.3.4/etc/hadoop/workers
[hadoopdeploy@hadoop04 hadoop]$ scp /opt/bigdata/hadoop-3.3.4/etc/hadoop/workers hadoopdeploy@hadoop03:/opt/bigdata/hadoop-3.3.4/etc/hadoop/workers

3.2.10 配置环境变量

[hadoopdeploy@hadoop04 hadoop]$ source /etc/profile

3.2.11 查看之前集群的节点

3.3 启动新退出的 namenode

[hadoopdeploy@hadoop04 logs]$ hdfs --daemon start datanode
[hadoopdeploy@hadoop04 logs]$ jps
2278 DataNode
2349 Jps
[hadoopdeploy@hadoop04 logs]$

留神: 如果咱们不想让任意一台机器轻易就退出到了咱们的集群中,那么咱们通过 白名单 来管制。

3.3.1 节点之间的数据均衡

新退出的节点磁盘空间比拟大,这个时候咱们就能够将别的节点的数据平衡到这个节点中来。

# 设置数据传输带宽
[hadoopdeploy@hadoop04 logs]$ hdfs dfsadmin  -setBalancerBandwidth 10485760
Balancer bandwidth is set to 10485760
# 执行 banalce
[hadoopdeploy@hadoop04 logs]$ hdfs balancer -policy datanode -threshold 5

3.4 集群节点下线

3.4.1 编辑 dfs.hosts.exclude 配置指定的文件

留神: 只须要在 NameNode 或者 ResourceManager 上执行即可。

vim hdfs-site.xml

<!-- 配置黑名单,应用黑名单能够下线集群  -->
<property>
    <name>dfs.hosts.exclude</name>
    <value>/opt/bigdata/hadoop-3.3.4/etc/hadoop/blacklist.hosts</value>
</property>

留神: 这个配置文件如果之间没有配置过,则须要重启集群才失效,如果之前配置过,则在 NameNodeResourceManager节点上执行 hdfs dfsadmin -refreshNodes 命令即可。

3.4.2 下线节点

编辑 blacklist.hosts文件,退出须要下线的节点。(NameNode 或 ResourceManager 上操作

[hadoopdeploy@hadoop01 ~]$ cd /opt/bigdata/hadoop-3.3.4/etc/hadoop/
[hadoopdeploy@hadoop01 hadoop]$ vim blacklist.hosts
[hadoopdeploy@hadoop01 hadoop]$ cat blacklist.hosts
hadoop04
[hadoopdeploy@hadoop01 hadoop]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
[hadoopdeploy@hadoop01 hadoop]$

在 hdfs 集群上能够看到hadoop04 曾经下线了.

节点移除后,能够思考再次平衡集群中的数据。

留神: 此时能够看到咱们的集群中有 4 台机器,假如咱们集群的正本设置为 4,那么此时是不可下线节点的,须要批改集群的正本 <4。

3.4.3 敞开下线的 datanode 节点

[hadoopdeploy@hadoop04 logs]$ hdfs --daemon stop datanode
[hadoopdeploy@hadoop04 logs]$

3.4.4 清空黑名单里的内容

正文完
 0