HDFS—故障排除
NameNode 故障处理
- 需求NameNode 进程崩溃且存储的数据丢失,如何恢复 NameNode?
- 故障模拟****终止 NameNode 进程
[lzl@hadoop12 current]$ kill -9 19886
删除 NameNode 存储的数据[lzl@hadoop12 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
- 问题解决****从 SecondaryNameNode 复制数据至 NameNode
[lzl@hadoop12 dfs]$ scp -r lzl@hadoop14:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
重启 NameNode[lzl@hadoop12 hadoop-3.1.3]$ hdfs --daemon start namenode
向集群上传文件
集群安全模式 & 磁盘修复
- 安全模式文件系统仅接受读取请求,不接受删除或修改等更改请求。
- 进入安全模式的场景- NameNode 加载镜像文件和编辑日志期间处于安全模式。- NameNode 接收 DataNode 注册时处于安全模式。
- 退出安全模式的条件-
dfs.namenode.safemode.min.datanodes
: 最小可用 DataNode 数量,默认为 0。-dfs.namenode.safemode.threshold-pct
: 副本数达到最小要求的 block 占系统总 block 数的百分比,默认为 0.999f。-dfs.namenode.safemode.extension
: 稳定时间,默认值 30000 毫秒,即 30 秒。 - 基本语法
bin/hdfs dfsadmin -safemode get # 查看安全模式状态bin/hdfs dfsadmin -safemode enter # 进入安全模式状态bin/hdfs dfsadmin -safemode leave # 离开安全模式状态bin/hdfs dfsadmin -safemode wait # 等待安全模式状态
- 案例 1:启动集群进入安全模式****重启集群
[lzl@hadoop12 subdir0]$ myhadoop.sh stop[lzl@hadoop12 subdir0]$ myhadoop.sh start
尝试删除数据,提示集群处于安全模式 - 案例 2:磁盘修复****需求:数据块损坏,进入安全模式,如何处理?步骤:删除特定块信息
[lzl@hadoop12 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta[lzl@hadoop12 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta
注意:hadoop13/hadoop14
上重复执行以上命令。重启集群[lzl@hadoop12 subdir0]$ myhadoop.sh stop[lzl@hadoop12 subdir0]$ myhadoop.sh start
观察状态访问http://hadoop12:9870/dfshealth.html#tab-overview
离开安全模式[lzl@hadoop12 subdir0]$ hdfs dfsadmin -safemode getSafe mode is ON[lzl@hadoop12 subdir0]$ hdfs dfsadmin -safemode leaveSafe mode is OFF
再次观察状态再次访问http://hadoop12:9870/dfshealth.html#tab-overview
1. 删除元数据2. 再次观察状态再次访问http://hadoop12:9870/dfshealth.html#tab-overview
,集群已恢复正常。 - 案例 3:模拟等待安全模式****查看当前模式
[lzl@hadoop12 hadoop-3.1.3]$ hdfs dfsadmin -safemode getSafe mode is OFF
进入安全模式[lzl@hadoop12 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter
创建并执行脚本/opt/module/hadoop-3.1.3路径上编辑脚本safemode.sh[lzl@hadoop12 hadoop-3.1.3]$ vim safemode.sh#!/bin/bashhdfs dfsadmin -safemode waithdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /[lzl@hadoop12 hadoop-3.1.3]$ chmod 777 safemode.sh[lzl@hadoop12 hadoop-3.1.3]$ ./safemode.sh
离开安全模式[lzl@hadoop12 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave
观察结果Safe mode is OFF
确认数据上传
慢磁盘监控
- 慢磁盘定义- “慢磁盘”指的是写入数据非常缓慢的磁盘。这类磁盘在长时间运行和高负载任务下容易出现。
- 发现慢磁盘的方法****通过心跳未联系时间- 当出现慢磁盘时,可能影响 DataNode 与 NameNode 之间的正常心跳(正常心跳间隔通常为 3 秒)。使用 fio 命令测试磁盘读写性能
[lzl@hadoop12 ~]# sudo yum install -y fio
顺序读测试[lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
结果显示,磁盘的总体顺序读速度为 360MiB/s。顺序写测试[lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
结果显示,磁盘的总体顺序写速度为 341MiB/s。随机写测试[lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
结果显示,磁盘的总体随机写速度为 309MiB/s。混合随机读写测试[lzl@hadoop12 ~]# sudo fio -filename=/home/lzl/test.log -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop
结果显示,磁盘的总体混合随机读速度为 220MiB/s,写速度为 94.6MiB/s。
小文件归档
HDFS 存储小文件的弊端
- 存储小文件会导致 NameNode 内存消耗过多,因为每个文件都需要按块存储,而每个块的元数据都存储在 NameNode 的内存中。尽管如此,小文件所需的磁盘空间取决于其实际大小而非块大小。
- 解决方案使用 HDFS 存档文件(HAR 文件)来更高效地归档小文件,减少 NameNode 内存使用的同时保持文件的透明访问。
- 案例实操****启动 YARN 进程
[lzl@hadoop12 hadoop-3.1.3]$ start-yarn.sh
归档文件[lzl@hadoop12 hadoop-3.1.3]$ hadoop archive -archiveName input.har -p /input /output
查看归档[lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -ls /output/input.har[lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -ls har:///output/input.har
解归档文件[lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -cp har:///output/input.har/* /
本文转载自: https://blog.csdn.net/qq_45115959/article/details/141257245
版权归原作者 大数据深度洞察 所有, 如有侵权,请联系我们删除。
版权归原作者 大数据深度洞察 所有, 如有侵权,请联系我们删除。