HDFS-故障排除

NameNode故障处理

 1 ) 需求:
NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode

2 )故障模拟

(1)kill -9 NameNode 进程

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

3 )问题解决

(1)拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录

(2)重新启动 NameNode

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

集群安全模式&磁盘修复

1 )安全模式:文件系统只接受读数据请求,而不接受删除、修改等变更请求

2 )进入安全模式场景
➢ NameNode 在加载镜像文件和编辑日志期间处于安全模式;
➢ 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 )基本语法

集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。

 5 )案例1:启动集群进入安全模式

(1)重新启动集群

(2)集群启动后,立即来到集群上删除数据,提示集群处于安全模式

 6 )案例 2:磁盘修复

需求:数据块损坏,进入安全模式,如何处理

( 1 ) 分 别 进 入 hadoop102 、 hadoop103 、 hadoop104 的 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0 目录,统一删除某 2 个块信息

(2)重新启动集群

(3)观察 http://hadoop102:9870/dfshealth.html#tab-overview

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

(4)离开安全模式

hdfs dfsadmin -safemode get Safe mode is ON

hdfs dfsadmin -safemode leave Safe mode is OFF

(5)观察 http://hadoop102:9870/dfshealth.html#tab-overview

 (6)将元数据删除

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

7 )案例 3 :

需求:模拟等待安全模式

(1 ) 查看当前模式

hdfs dfsadmin -safemode get Safe mode is OFF

 (2 )先进入安全模式

bin/hdfs dfsadmin -safemode enter

 (3 ) 创建并执行下面的脚本

在/opt/module/hadoop-3.1.3 路径上,编辑一个脚本 safemode.sh

#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /

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

bin/hdfs dfsadmin -safemode leave

 (5 ) 再观察 上 一个窗口

 (6 )HDFS 集群上已经有上传的数据了

慢磁盘监控

 “慢磁盘”指的时写入数据非常慢的一类磁盘。其实慢性磁盘并不少见,当机器运行时间长了,上面跑的任务多了,磁盘的读写性能自然会退化,严重时就会出现写入数据延时的问题。

如何发现慢磁盘?
正常在 HDFS 上创建一个目录,只需要不到 1s 的时间。如果你发现创建目录超过 1 分
钟及以上,而且这个现象并不是每次都有。只是偶尔慢了一下,就很有可能存在慢磁盘。
可以采用如下方法找出是哪块磁盘慢:

1 )通过心跳未联系时间。
一般出现慢磁盘现象,会影响到 DataNode 与 NameNode 之间的心跳。正常情况心跳时间间隔是 3s。超过 3s 说明有异常。

 2 )fio  命令,测试磁盘的读写性能

(1)顺序读测试

sudo yum install -y fio

sudo fio -filename=/home/atguigu/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

 结果显示,磁盘的总体顺序读速度为 342MiB/s。

(2)顺序写测试

sudo fio -filename=/home/hjl/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

 结果显示,磁盘的总体顺序写速度为 311MiB/s。

(3)随机写测试

sudo fio -filename=/home/atguigu/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

 结果显示,磁盘的总体随机写速度为 268MiB/s。

(4)混合随机读写:

sudo fio -filename=/home/hjl/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

 结果显示,磁盘的总体混合随机读写,读速度为 217MiB/s,写速度 88.6MiB/s

小文件归档

1 )HDFS 存储小文件弊端

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

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

HDFS 存档文件或 HAR 文件,是一个更高效的文件存档工具,它将文件存入 HDFS 块,在减少 NameNode 内存使用的同时,允许对文件进行透明的访问。具体说来,HDFS 存档文件对内还是一个一个独立文件,对 NameNode 而言却是一个整体,减少了 NameNode 的内存。

 3 )案例实操

(1)需要启动 YARN 进程

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

 hadoop archive -archiveName input.har -p /input /output

 (3)查看归档

hadoop fs -ls /output/input.har

 hadoop fs -ls har:///output/input.har

 (4)解归档文件

hadoop fs -cp har:///output/input.har/* /

### 回答1: 您好,hdfs zkfc -formatzk 失败可能是由于以下原因导致的: 1. ZooKeeper 服务未启动或未正确配置。请确保 ZooKeeper 服务已经启动,并且配置正确。 2. Hadoop 配置文件中的 ZooKeeper 相关配置错误。请检查 Hadoop 配置文件中的 ZooKeeper 相关配置是否正确。 3. Hadoop 集群中的节点之间网络连接不稳定或者存在故障。请检查 Hadoop 集群中的节点之间的网络连接是否正常,并且排除故障。 希望以上信息能够帮助您解决问题。如果您需要更多帮助,请提供更多详细信息,我们会尽力帮助您解决问题。 ### 回答2: HDFS的zkfc是作为Hadoop高可用性的一个关键组件,它负责监控NameNode的健康状态,并在发现NameNode失效时协调新的Active NameNode的选举。zkfc需要对Zookeeper进行操作来进行其功能,而zkfc -formatzk是对Zookeeper进行初始化所使用的命令。 因为zkfc -formatzk命令会将Zookeeper的节点信息进行初始化,所以执行该命令时最好确保Zookeeper的网络环境完全正确,确保Zookeeper处于停止状态。 引起zkfc -formatzk操作失败的可能原因包括: 1. Zookeeper不可用或配置错误 在zkfc -formatzk操作时,执行命令的机器需要能够成功连接到Zookeeper节点。如果Zookeeper配置有误,导致命令无法连接上Zookeeper,那么zkfc -formatzk命令就会失败。检查Zookeeper是否正确启动,并检查通信配置是否正确。 2. Znode中的数据格式不正确 zkfc -formatzk命令会在Zookeeper的Znode中创建新的数据结构,而在这些数据结构中的格式必须保持正确。如果之前曾经执行过zkfc -formatzk命令或手动修改过Zookeeper的数据格式,那么可能会导致数据格式不兼容,从而导致zkfc -formatzk命令失败。如果已执行过该命令,则需要先清空Zookeeper的数据,并再次执行该命令。 3. 网络问题 端口设置不正确,或者网络连接不稳定等问题也可能导致zkfc -formatzk命令失败。在执行该命令之前,检查一下网络状态和端口设置是否正确,并尝试使用ping命令进行诊断。 总之,zkfc -formatzk命令是Hadoop高可用性体系中的一个重要组件。当发现该命令无法执行时,我们应该先排除网络问题,再检查Zookeeper的配置是否正确以及Zookeeper中的数据格式是否正确,确保Zookeeper处于停止状态,然后再执行该命令。 ### 回答3: HDFS是一个分布式文件系统,ZooKeeper是一个开源的分布式协调服务。hdfs zkfc是一个Hadoop命令,它用于格式化ZooKeeper Failover Controller(ZKFC)。ZKFC是一个Hadoop高可用性(HA)架构的组件之一,它用于控制Hadoop NameNode的故障转移。如果hdfs zkfc -formatzk命令执行失败,可能会出现以下一些原因: 1. ZooKeeper集合配置错误:如果Hadoop配置文件中的ZooKeeper集合配置错误,则hdfs zkfc -formatzk命令将无法正常工作。这是因为hdfs zkfc命令需要连接到正确的ZooKeeper实例才能执行格式化操作。 2. ZooKeeper节点不可用:如果ZooKeeper节点因某种原因不可用,例如网络问题或硬件故障hdfs zkfc -formatzk命令也会失败。在这种情况下,您需要确保ZooKeeper服务正在运行,并且所有节点正常工作。 3. 权限问题:如果hdfs zkfc命令执行用户没有足够的权限来格式化ZooKeeper故障转移控制器,则该命令将失败。在这种情况下,您需要使用具有适当权限的用户执行命令。 4. 文件系统中的问题:如果Hadoop文件系统(HDFS)中有某些文件损坏或损坏,则hdfs zkfc -formatzk命令可能会失败。在这种情况下,您需要修复文件系统并重新运行命令。 总之,如果hdfs zkfc -formatzk命令执行失败,您需要仔细检查配置和系统设置,以确定导致问题的原因,并采取相应的措施来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值