打怪升级之小白的大数据之旅(四十七)
HDFS扩展知识点
上次回顾
上一章我们学习了HDFS个模块的运行原理,学会了这些,本章节的扩展知识就会更加容易理解
HDFS的扩展知识点
NameNode故障处理
当我们的NameNode出现了故障后,我们可以采用如下两种方法恢复数据,当然了,只能恢复部分的数据,因为内存中正在运行的数据还没有滚动写入到edit文件中
NameNode数据恢复方法
利用NN和2NN的工作原理,我们可以将SecondaryNameNode中数据拷贝到NameNode存储数据的目录,然后对edit文件和fsimage文件进行合并,从而恢复NameNode的数据
恢复步骤如下:
-
关闭NameNode服务
hdfs --daemon stop namenode
-
删除NameNode存储的数据
rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/current/*
-
拷贝SecondaryNameNode中数据到原NameNode存储数据目录
scp -r atguigu@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/current/* /opt/module/hadoop-3.1.3/data/dfs/name/current/
-
重新启动NameNode
hdfs --daemon start namenode
- 因为使用2NN这种方法,真的遇到特殊情况,也只能恢复部分数据,所以在真正工作中,我们基本上不用它,我们用的是HDFS+HV,后面会将它,不要急哈
集群安全模式
- 当我们刚启动集群时,是无法进行数据的操作的,因为此时集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式
- 安全模式的基本语法
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
- 知道了这个,我们通常写入数据时会以脚本的方式进行写入
# 编写脚本safemode.sh
vim safemode.sh
# 脚本内容
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
- 这么的好处就是可以通过监控安全模式的状态来进行文件的写入,防止因集群还没有启动完成就进行操作导致节点异常崩溃掉
服役新数据节点
- 服役新数据节点的意思就是,当我们需要添加新的节点时,可以不用停止集群,直接启动该节点即可将该节点添加进集群中
- 准备工作
- 我们首先克隆一台主机
- 然后修改IP地址和主机名称
- 注意看一下hosts文件是否有新加的主机名称,我前面多配了很多台,所以我们不需要修改hosts
- 利用source更新一下配置文件
- 直接启动DataNode即可关联到集群中
- 如果数据不均衡,我们可以使用下面的命令,实现集群的再平衡
sbin/start-balancer.sh
退役旧数据节点
添加白名单
再前面我添加新数据节点时,只需要直接启动即可关联到集群中,这样很不安全,如果是黑客这么操作,它可以将我们的数据通过副本机制直接拷贝到他的服务器中,为了增加安全性,我们需要对我们集群中的节点添加到白名单中,步骤如下:
- 在NameNode的/opt/module/hadoop-3.1.3/etc/hadoop目录下创建dfs.hosts文件
cd /opt/module/hadoop-3.1.3/etc/hadoop vim dfs.hosts # 添加节点到白名单中 hadoop102 hadoop103 hadoop104
- 在NameNode的
hdfs-site.xml
配置文件中增加dfs.hosts属性(并重启NameNode)<property> <name>dfs.hosts</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/dfs.hosts</value> </property>
- 文件分发
xsync hdfs-site.xml
- 刷新NameNode
hdfs dfsadmin -refreshNodes
- 更新ResourceManager节点
yarn rmadmin -refreshNodes
- 如果数据不均衡,可以使用集群再平衡
./start-balancer.sh
黑名单退役
当我们需要将某个节点清出集群时,不能直接拔电源,因为这个节点中还有我们的数据在里面,此时我们就需要使用黑名单退役来进行安全的节点退出工作,步骤如下
-
在NameNode的/opt/module/hadoop-3.1.3/etc/hadoop目录下创建dfs.hosts.exclude文件
cd /opt/module/hadoop-3.1.3/etc/hadoop # 创建黑名单文件 vim dfs.hosts.exclude # 添加要退役的主机节点 hadoop105
-
在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性(并重启NameNode)
<property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/dfs.hosts.exclude</value> </property>
-
刷新NameNode、刷新ResourceManager
hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
-
检查Web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点
-
等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役
-
如果数据不均衡,可以用命令实现集群的再平衡
sbin/start-balancer.sh
Datanode多目录配置
- DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本
- 这个操作就类似我们对某个节点中的磁盘进行了扩展
- 直接修改配置文件
hdfs-site.xml
即可完成这个操作<property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value> </property>
总结
本章节主要是对一些我们工作中可能会遇到的一些操作进行了总结,好饿了,到这里HDFS的内容就结束了,下一章我会为大家带来MR(MapReduce)的知识点