第六章 HDFS—故障排除

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

6.1 NameNode故障处理

  • 需求NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode
  • 故障模拟
  1. kill -9 NameNode 进程:kill -9 19886
  2. 删除 NameNode 存储的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name):rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
  • 问题解决 
  1. 进入logs文件夹,查看日志:tail -n 100 hadoop-qx-namenode-hadoop102.log
  2. 拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录:scp -r qx@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
  3. 重新启动 NameNode:hdfs --daemon start namenode
  4. 向集群上传一个文件,成功

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

  • 安全模式:文件系统只接受读数据请求,而不接受删除、修改等变更的请求
  • 进入安全模式场景
  1. NameNode 在加载镜像文件和编辑日志期间处于安全模式,即集群启动的时候
  2. NameNode 在 接收 DataNode 注册时,处于安全模式

  • 退出安全模式条件
  1. dfs.namenode.safemode.min.datanodes: 最小可用 datanode 数量,默认 0
  2. dfs.namenode.safemode.threshold-pct: 副本数达到最小要求的 block 占系统总 block 数的百分比,默认 0.999f 。(只允许丢一个块)
  3. dfs.namenode.safemode.extension: 稳定时间,默认值 30000 毫秒,即 30
  • 基本语法,集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式
  1. bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
  2. bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
  3. bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
  4. bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
  • 案例1:启动集群进入安全模式
  1. 重新启动集群:myhadoop.sh stop myhadoop.sh start
  2. 集群启动后,立即来到集群上删除数据,会提示集群处于安全模式
  • 案例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 个块信息
    [qx@hadoop102 subdir0]$ pwd
    /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0
    
    [qx@hadoop102 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
    
    [qx@hadoop102 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta
    
    //说明:hadoop103和hadoop104重复执行以上命令
  2. 重新启动集群:myhadoop.sh stop myhadoop.sh start
  3. 观察 http://hadoop102:9870/dfshealth.html#tab-overview,发现安全模式已经打开,块的数量没有达到要求
  4. 查看安全模式状态:hdfs dfsadmin -safemode get
  5. 离开安全模式:hdfs dfsadmin -safemode leave
  6. 观察 http://hadoop102:9870/dfshealth.html#tab-overview ,发现安全模式已经关闭,但是页面会有提示丢失了两块blocks
  7. 将元数据删除,直接在页面上点击删除按钮删除元数据,保证只留下正常的数据
  8. 观察 http://hadoop102:9870/dfshealth.html#tab-overview 集群已经正常
  • 案例3:模拟等待安全模式。需求:模拟等待安全模式
  1. 查看当前模式:hdfs dfsadmin -safemode get 
  2. 先进入安全模式:bin/hdfs dfsadmin -safemode enter
  3. 创建并执行下面的脚本:/opt/module/hadoop-3.1.3 路径上,编辑一个脚本 safemode.s,chmod 777 safemode.sh,./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. 再观察上一个窗口:Safe mode is OFF
  6. HDFS 集群上已经有上传的数据了

6.3 慢磁盘监控

       “慢磁盘”指的时写入数据非常慢的一类磁盘。其实慢性磁盘并不少见,当机器运行时间长了,上面跑的任务多了,磁盘的读写性能自然会退化,严重时就会出现写入数据延时的问题。
       如何发现慢磁盘?正常在 HDFS 上创建一个目录,只需要不到 1s 的时间。如果你发现创建目录超过 1 分钟及以上,而且这个现象并不是每次都有。只是偶尔慢了一下,就很有可能存在慢磁盘。 可以采用如下方法找出是哪块磁盘慢
  • 通过心跳未联系时间:一般出现慢磁盘现象,会影响到 DataNode 与 NameNode 之间的心跳。正常情况心跳时间间隔是 3s。超过 3s 说明有异常
  • fio 命令,测试磁盘的读写性能,安装工具:sudo yum install -y fio
  1. 顺序读测试:sudo fio -filename=/home/qx/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
  2. 顺序写测试:sudo fio -filename=/home/atguigu/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
  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,结果显示,磁盘的总体随机写速度为 309MiB/s
  4. 混合随机读写:sudo fio -filename=/home/atguigu/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

6.4 小文件归档

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

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

  • 案例实操
  1. 需要启动YARN进程:start-yarn.sh
  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/* /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值