3.2 服役新服务器
1、随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。
2、环境准备
(1)在 hadoop100 主机上再克隆一台 hadoop105 主机
(2)修改 IP 地址和主机名称
(3)拷贝 hadoop102 的/opt/module 目录和/etc/profile.d/my_env.sh 到 hadoop105
(4)删除 hadoop105 上 Hadoop 的历史数据,data 和 log 数据
(5)配置 hadoop102 和 hadoop103 到 hadoop105 的 ssh 无密登录
3、服役新节点的具体步骤
(1)直接启动 DataNode,即可关联到集群
hdfs --daemon start datanode yarn --daemon start nodemanager
4、在白名单中增加新服役的服务器
(1)在白名单 whitelist 中增加 hadoop104、hadoop105,并重启集群
(2)分发白名单whitelist
(3)刷新NameNode
hdfs dfsadmin -refreshNodes
5、在 hadoop105 上上传文件
3.3 黑名单退役服务器
黑名单:表示在黑名单的主机 IP 地址不可以用来存储数据。
1、编辑/opt/module/hadoop-3.1.3/etc/hadoop 目录下的 blacklist 文件。添加如下主机名称(要退役的节点)
注意:如果白名单中没有配置,需要在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数
<!-- 黑名单 --> <property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value> </property>
2、分发配置文件 blacklist,hdfs-site.xml
3、第一次添加黑名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可。
hdfs dfsadmin -refreshNodes
4、检查 Web 浏览器,退役节点的状态为 decommission in progress(退役中),说明数据节点正在复制块到其他节点。
5、等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是 3,服役的节点小于等于 3,是不能退役成功的,需要修改副本数后才能退役。
6、如果数据不均衡,可以用命令实现集群的再平衡。
4、HDFS—存储优化
注:演示纠删码和异构存储需要一共 5 台虚拟机。尽量拿另外一套集群。提前准备 5 台服务器的集群。
4.1 纠删码
4.1.1 纠删原理
HDFS 默认情况下,一个文件有 3 个副本,这样提高了数据的可靠性,但也带来了 2 倍的冗余开销。Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约 50%左右的存储空间。
1、纠删码操作相关的命令
Usage: bin/hdfs ec [COMMAND] [-listPolicies] [-addPolicies -policyFile <file>] [-getPolicy -path <path>] [-removePolicy -policy <policy>] [-setPolicy -path <path> [-policy <policy>] [-replicate]] [-unsetPolicy -path <path>] [-listCodecs] [-enablePolicy -policy <policy>] [-disablePolicy -policy <policy>] [-help <command-name>].
2、查看当前支持的纠删码策略
Erasure Coding Policies: ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5], State=DISABLED ErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2], State=DISABLED ErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1], State=ENABLED ErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k, Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=3], State=DISABLED ErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor, numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4], State=DISABLED
3、纠删码策略解释
RS-3-2-1024k:使用 RS 编码,每 3 个数据单元,生成 2 个校验单元,共 5 个单元,也就是说:这 5 个单元中,只要有任意的 3 个单元存在(不管是数据单元还是校验单元,只要
总数=3),就可以得到原始数据。每个单元的大小是1024k=10241024=1048576。
RS-10-4-1024k:使用 RS 编码,每 10 个数据单元(cell),生成 4 个校验单元,共 14个单元,也就是说:这 14 个单元中,只要有任意的 10 个单元存在(不管是数据单元还是校
验单元,只要总数=10),就可以得到原始数据。每个单元的大小是 1024k=10241024=1048576。
RS-6-3-1024k:使用 RS 编码,每 6 个数据单元,生成 3 个校验单元,共 9 个单元,也就是说:这 9 个单元中,只要有任意的 6 个单元存在(不管是数据单元还是校验单元,只要
总数=6),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。
RS-LEGACY-6-3-1024k:策略和上面的 RS-6-3-1024k 一样,只是编码的算法用的是 rslegacy。
XOR-2-1-1024k:使用 XOR 编码(速度比 RS 编码快),每 2 个数据单元,生成 1 个校验单元,共 3 个单元,也就是说:这 3 个单元中,只要有任意的 2 个单元存在(不管是数据单元还是校验单元,只要总数= 2),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。
4.1.2 纠删码案例实操
纠删码策略是给具体一个路径设置。所有往此路径下储存的文件,都会执行此策略。默认只开启对RS-6-3-1024k 策略的支持,如要使用别的策略需要提前启用。
1、需求:将/input 目录设置为 RS-3-2-1024k 策略
2、具体步骤
(1)开启对 RS-3-2-1024k 策略的支持
hdfs ec -enablePolicy -policy RS-3-2-1024k
(2)在 HDFS 创建目录,并设置 RS-3-2-1024k 策略
hdfs ec -setPolicy -path /input -policy RS-3-2-1024k
(3)上传文件,并查看文件编码后的存储情况
hdfs dfs -put web.log /input
注:你所上传的文件需要大于 2M 才能看出效果。(低于 2M,只有一个数据单元和两个校验单元)
4.2 异构存储(冷热数据分离)
异构存储主要解决不同的数据储存在不同类型的硬盘中,达到最佳性能的问题。
1、关于储存类型
RAM_DISK:(内存镜像文件系统)
SSD:(固态硬盘)
DISK:(普通磁盘,在HDFS中,如果没有主动声明数据目录储存类型默认都是DISK)
ARCHIVE:(没有特指哪种存储介质,主要的指的是计算能力比较弱而存储密度比较高的存储介质,用来解决数据量的
容量扩增的问题,一般用于归档)
2、关于储存策略
5、HDFS—故障排除
5.1 NameNode故障处理
1、NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode。
2、故障模拟
(1)kill -9 NameNode进程
(2)删除NameNode储存的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name)
3、问题解决
(1)拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录
(2)重新启动 NameNode
5.2 集群安全模式和磁盘修复
1、安全模式:文件系统之接受读数据请求,而不接受删除、修改等变更请求
2、进入安全模式场景
(1)NameNode在加载镜像文件和编辑日志期间处于安全模式;
(2)NameNode在接受DataNode注册时,处于安全模式
3、退出安全模式
dfs.namenode.safemode.min.datanodes:最小可用 datanode 数量,默认 0
dfs.namenode.safemode.threshold-pct:副本数达到最小要求的 block 占系统总 block 数的
百分比,默认 0.999f。(只允许丢一个块)
dfs.namenode.safemode.extension:稳定时间,默认值 30000 毫秒,即 30 秒
4、基本语法
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成之后,自动退出安全模式。
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave(功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)