第6章、HDFS_故障排除

注意:采用三台服务器即可,恢复到 Yarn 开始的服务器快照。

6.1 NameNode 故障处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NyrrbjWf-1653446713145)(../../_resources/9383245d0cb891776aac5bf2bf07ff26-3.png)]

1)需求:
NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode
2)故障模拟
查询并杀死NameNode进程

[pcz@hadoop1 current]$ kill -9 19886

(2)删除 NameNode 存储的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name)

[pcz@hadoop1 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*

3)问题解决
(1)拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录

[pcz@hadoop1 dfs]$ scp -r 
pcz@hadoop2:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/

(2)重新启动 NameNode

[pcz@hadoop1 hadoop-3.1.3]$ hdfs --daemon start namenode

(3)向集群上传一个文件

6.2 集群安全模式&磁盘修复

1)安全模式:

文件系统只接受读数据请求,而不接受删除、修改等变更请求

2)进入安全模式场景

➢ NameNode 在加载镜像文件和编辑日志期间处于安全模式;
➢ NameNode 再接收 DataNode 注册时,处于安全模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsyRIvdP-1653446713146)(../../_resources/f7443332ab1a6968ead1d4333edb9bc9-3.png)]

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 (功能描述:等待安全模式状态)

5)案例 1:

启动集群进入安全模式
(1)重新启动集群

[pcz@hadoop1 subdir0]$ pczhd stop
[pcz@hadoop1 subdir0]$ pczhd start

(2)集群启动后,立即来到集群上删除数据,提示集群处于安全模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTPtvcgX-1653446713147)(../../_resources/681932a9cc7ec828eb6a21447a21cb2a-3.png)]

6)案例 2:

磁盘修复
需求:数据块损坏,进入安全模式,如何处理
( 1 ) 分 别 进 入 hadoop1 、 hadoop2 、hadoop3的/opt/module/hadoop3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0 目录,统一删除某 2 个块信息

[pcz@hadoop1 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0
[pcz@hadoop1 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
[pcz@hadoop1 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta

(3)观察 http://hadoop1:9870/dfshealth.html#tab-overview
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hLXw5Ega-1653446713147)(../../_resources/8dada9da52e57c0504a4554bd6a697c9-3.png)]

说明:安全模式已经打开,块的数量没有达到要求。
(4)离开安全模式

[pcz@hadoop1 subdir0]$ hdfs dfsadmin -safemode get
Safe mode is ON
[pcz@hadoop1 subdir0]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

(5)观察 http://hadoop1:9870/dfshealth.html#tab-overview
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4A1ygra-1653446713147)(../../_resources/0f22b236e3f171bc6bee8ebbc752dcce-3.png)]

(6)将元数据删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sxb8ylWR-1653446713148)(../../_resources/4f078492c463bcb77c9de2d7ec6110f2-2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GjkYk6pH-1653446713148)(../../_resources/f6c2b021112305291f02689e90d9e149-3.png)]

(7)观察 http://hadoop1:9870/dfshealth.html#tab-overview,集群已经正常

7)案例 3:

需求:模拟等待安全模式
(1)查看当前模式

[pcz@hadoop1 hadoop-3.1.3]$ hdfs dfsadmin -safemode get
Safe mode is OFF

(2)先进入安全模式

[pcz@hadoop1 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter

(3)创建并执行下面的脚本
该脚本的主要目的是可以在实际生产环境中可根据自己的需求,设置一个用于安全模式结束时立马启动的命令(这里模拟的是上传README.txt这个文件)
在/opt/module/hadoop-3.1.3 路径上,编辑一个脚本safemode.sh

[pcz@hadoop1 hadoop-3.1.3]$ vim safemode.sh
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
[pcz@hadoop1 hadoop-3.1.3]$ chmod 777 safemode.sh
[pcz@hadoop1 hadoop-3.1.3]$ ./safemode.sh 

(4)再打开一个窗口,执行

[pcz@hadoop1 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave

(5)再观察上一个窗口

Safe mode is OFF

(6)HDFS 集群上已经有上传的数据了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lzua6Mv1-1653446713148)(../../_resources/896942d9922710e913a78d44d7cfa1b8-2.png)]

6.3 慢磁盘监控

“慢磁盘”指的时写入数据非常慢的一类磁盘。其实慢性磁盘并不少见,当机器运行时间长了,上面跑的任务多了,磁盘的读写性能自然会退化,严重时就会出现写入数据延时的问题。
如何发现慢磁盘?
正常在 HDFS 上创建一个目录,只需要不到 1s 的时间。如果你发现创建目录超过 1 分钟及以上,而且这个现象并不是每次都有。只是偶尔慢了一下,就很有可能存在慢磁盘。
可以采用如下方法找出是哪块磁盘慢:

1)通过心跳未联系时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NsxyTkYH-1653446713149)(../../_resources/28df01acd083395fee6b0f39d6e0390f-3.png)]

2)fio 命令

测试磁盘的读写性能

(1)顺序读测试
[pcz@hadoop1 ~]$ sudo yum install -y fio
[pcz@hadoop1 ~]$sudo fio -filename=/home/pcz/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
Run status group 0 (all jobs):
Run status group 0 (all jobs):
   READ: bw=541MiB/s (567MB/s), 541MiB/s-541MiB/s (567MB/s-567MB/s), io=20.0GiB (21.5GB), run=37888-37888msec

结果显示,磁盘的总体顺序读速度为 541MiB/s。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3qLPjMq-1653446713149)(../../_resources/fa29f9c8f5b7aca80a35ee5696622409-3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uLldtSXt-1653446713150)(../../_resources/13f35929e11055e6fa3a1435156b6e04-3.png)]

(2)顺序写测试
[pcz@hadoop1 ~]# sudo fio -filename=/home/pcz/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
Run status group 0 (all jobs):
  WRITE: bw=560MiB/s (588MB/s), 560MiB/s-560MiB/s (588MB/s-588MB/s), io=20.0GiB (21.5GB), run=36543-36543msec

结果显示,磁盘的总体顺序写速度为 560MiB/s。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPYR8KqY-1653446713151)(../../_resources/110fa03941f69ffe72170ddb28ce0dc1-3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m0GHmqO4-1653446713151)(../../_resources/d2cec08cd50f1f845f478f9ede579501-3.png)]

(3)随机写测试
[pcz@hadoop1 ~]# sudo fio -filename=/home/pcz/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
Run status group 0 (all jobs):
  WRITE: bw=294MiB/s (308MB/s), 294MiB/s-294MiB/s (308MB/s-308MB/s), io=17.2GiB (18.5GB), run=60003-60003msec

结果显示,磁盘的总体随机写速度为 294MiB/s。
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mribKow-1653446713152)(../../_resources/f9c98b63711e3dd3485fa1efb180e785-3.png)]

(4)混合随机读写:

[pcz@hadoop1 ~]# sudo fio -filename=/home/pcz/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
Run status group 0 (all jobs):
   READ: bw=302MiB/s (316MB/s), 302MiB/s-302MiB/s (316MB/s-316MB/s), io=13.0GiB (15.0GB), run=47522-47522msec
  WRITE: bw=129MiB/s (136MB/s), 129MiB/s-129MiB/s (136MB/s-136MB/s), io=6149MiB (6447MB), run=47522-47522msec


结果显示,磁盘的总体混合随机读写,读速度为 302MiB/s,写速度 129MiB/s。所以目前来说,不存在慢磁盘。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zmkxqp18-1653446713153)(../../_resources/f623b30a6d88617e270b6778863ac17a-3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ElswPYB-1653446713153)(../../_resources/daf0923ad6334b8a347d3e9668a88aa9-3.png)]

如果找出慢磁盘后,可以将慢磁盘设置为COLD存储策略,用于存储一些长期不使用的数据,提高资源利用率。

6.4 小文件归档

1)HDFS 存储小文件弊端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7fDOdZo-1653446713153)(../../_resources/c28b4941bc0a218952f4f431f03f33ee-3.png)]

每个文件均按块存储,每个块的元数据存储在 NameNode 的内存中,因此 HDFS 存储小文件会非常低效。因为大量的小文件会耗尽 NameNode 中的大部分内存。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个 1MB 的文件设置为128MB 的块存储,实际使用的是 1MB 的磁盘空间,而不是 128MB。

2)解决存储小文件办法之一

HDFS 存档文件或 HAR 文件,是一个更高效的文件存档工具,它将文件存入 HDFS 块,在减少 NameNode 内存使用的同时,允许对文件进行透明的访问。具体说来,HDFS 存档文件对内还是一个一个独立文件,对 NameNode 而言却是一个整体,减少了 NameNode 的内存。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4TwAZez-1653446713153)(../../_resources/f9f4edc7f5b7502d22c266d1c1d981ea-3.png)]

3)案例实操
(1)需要启动 YARN 进程

[pcz@hadoop1 hadoop-3.1.3]$ start-yarn.sh

(2)归档文件
把/input 目录里面的所有文件归档成一个叫 input.har 的归档文件,并把归档后文件存储到/output 路径下

[pcz@hadoop1 hadoop-3.1.3]$ hadoop archive -archiveName input.har -p /input /output

(3)查看归档

[pcz@hadoop1 hadoop-3.1.3]$ hadoop fs -ls 
/output/input.har
[pcz@hadoop1 hadoop-3.1.3]$ hadoop fs -ls
har:///output/input.har

(4)解归档文件

[pcz@hadoop1 hadoop-3.1.3]$ hadoop fs -cp 
har:///output/input.har/* /
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个错误提示表示 Hadoop 找不到正确的 HDFS 安装路径。你需要检查 Hadoop 配置文件中的 hadoop_hdfs_home 参数是否正确设置,或者确认 HDFS 是否已经正确安装并设置了环境变量。 ### 回答2: Hadoop 是一款大数据处理框架,需要依赖 Hadoop HDFS 存储系统。在配置 Hadoop 环境时,需要设置环境变量 HADOOP_HDFS_HOME,以指定 Hadoop HDFS 的安装路径。当出现 "error: invalid hadoop_hdfs_home" 错误时,意味着系统无法识别该环境变量,即 Hadoop HDFS 安装路径无效。 解决该问题的方法是检查环境变量的设置是否正确。首先在命令行界面输入 echo $HADOOP_HDFS_HOME 命令,以检查系统是否能识别该环境变量。如果该命令无法输出正确的路径,则需要修改环境变量的设置。 可以在 ~/.bashrc 或 ~/.bash_profile 文件中添加以下环境变量设置语句: export HADOOP_HDFS_HOME=/path/to/hadoop-hdfs 其中,/path/to/hadoop-hdfsHadoop HDFS 的安装路径。设置好这个环境变量之后,可以输入 source ~/.bashrc 或 source ~/.bash_profile 命令,以使环境变量的改动生效。 另外,还可通过设置 Hadoop 的配置文件来修改 Hadoop HDFS 的安装路径。可以在 Hadoop 配置文件 core-site.xml 中添加以下配置: <property> <name>hadoop.hdfs.home</name> <value>/path/to/hadoop-hdfs</value> </property> 在以上配置中,/path/to/hadoop-hdfsHadoop HDFS 的安装路径。保存好配置文件后,重新启动 Hadoop,即可解决 "error: invalid hadoop_hdfs_home" 错误。 ### 回答3: 这个错误信息意味着在运行hadoop相关命令时,系统无法找到指定的hadoop_hdfs_home环境变量。hadoop_hdfs_home是一个关键的环境变量,用于指定hadoop分布式文件系统(HDFS)的安装目录。如果系统无法找到或者无法识别该环境变量,就会出现invalid错误提示。 要解决这个问题,可以尝试以下步骤: 1.检查hadoop_hdfs_home环境变量是否正确设置,可以通过运行echo $hadoop_hdfs_home命令来确认该环境变量的值是否正确。 2.如果hadoop_hdfs_home环境变量未设置,可以通过手动设置该变量或者运行hadoop-env.sh脚本来设置该变量。 3.如果hadoop_hdfs_home环境变量设置正确,但仍然无法正常运行hadoop相关命令,可以尝试重新安装hadoop,并确保正确配置了环境变量。 4.最后,如果你还是无法解决这个问题,可以查看系统日志文件或运行hadoop日志命令来查找更详细的信息和错误提示,以帮助你进一步解决该问题。 总之,如果出现invalid hadoop_hdfs_home错误提示,需要确认hadoop_hdfs_home环境变量设置是否正确,并根据具体情况采取适当措施,以解决此问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TryBest_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值