• 第二十五章 HDFS—故障排除


    一、NameNode故障处理

    1.需求

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

    2.故障模拟

    #1.kill -9 NameNode进程
    [delopy@hadoop102 current]$ kill -9 19886
    
    #2.删除NameNode存储的数据(/opt/module/hadoop/data/tmp/dfs/name)
    [delopy@hadoop102 hadoop]$ rm -rf /opt/module/hadoop/data/dfs/name/*
    

    3.问题解决

    #1.拷贝SecondaryNameNode中数据到原NameNode存储数据目录
    [delopy@hadoop102 dfs]$ scp -r delopy@hadoop104:/opt/module/hadoop/data/dfs/namesecondary/* ./name/
    
    #2.重新启动NameNode
    [delopy@hadoop102 hadoop]$ hdfs --daemon start namenode
    
    #3.向集群上传一个文件
    

    二、集群安全模式&磁盘修复

    1.安全模式

    #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秒
    

    2.基本语法

    集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
    1)bin/hdfs dfsadmin -safemode get	(功能描述:查看安全模式状态)
    
    2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
    
    3)bin/hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
    
    4)bin/hdfs dfsadmin -safemode wait	(功能描述:等待安全模式状态)
    

    3.案例1:启动集群进入安全模式

    #1.重新启动集群
    [delopy@hadoop102 subdir0]$ myhadoop.sh stop
    [delopy@hadoop102 subdir0]$ myhadoop.sh start
    
    #2.集群启动后,立即来到集群上删除数据,提示集群处于安全模式
    

    4.案例2:磁盘修复

    #1.需求:数据块损坏,进入安全模式,
    
    #2.如何处理
    1)分别进入hadoop102、hadoop103、hadoop104的/opt/module/hadoop/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0目录,统一删除某2个块信息
    [delopy@hadoop102 subdir0]$ pwd
    /opt/module/hadoop/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0
    
    [delopy@hadoop102 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
    [delopy@hadoop102 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta
    说明:hadoop103/hadoop104重复执行以上命令
    
    2)重新启动集群
    [delopy@hadoop102 subdir0]$ myhadoop.sh stop
    [delopy@hadoop102 subdir0]$ myhadoop.sh start
    
    3)观察http://hadoop102:9870/dfshealth.html#tab-overview
    

    说明:安全模式已经打开,块的数量没有达到要求。
    
    4)离开安全模式
    [delopy@hadoop102 subdir0]$ hdfs dfsadmin -safemode get
    Safe mode is ON
    [delopy@hadoop102 subdir0]$ 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,集群已经正常
    

    5.案例3:模拟等待安全模式

    #1.查看当前模式
    [delopy@hadoop102 hadoop]$ hdfs dfsadmin -safemode get
    Safe mode is OFF
    
    #2.先进入安全模式
    [delopy@hadoop102 hadoop]$ bin/hdfs dfsadmin -safemode enter
    
    #3.创建并执行下面的脚本
    在/opt/module/hadoop路径上,编辑一个脚本safemode.sh
    [delopy@hadoop102 hadoop]$ vim safemode.sh
    
    #!/bin/bash
    hdfs dfsadmin -safemode wait
    hdfs dfs -put /opt/module/hadoop/README.txt /
    
    [delopy@hadoop102 hadoop]$ chmod 777 safemode.sh
    
    [delopy@hadoop102 hadoop]$ ./safemode.sh 
    
    #4.再打开一个窗口,执行
    [delopy@hadoop102 hadoop]$ bin/hdfs dfsadmin -safemode leave
    
    #5.再观察上一个窗口
    Safe mode is OFF
    
    #6.HDFS集群上已经有上传的数据了
    

    三、慢磁盘监控

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

    1.通过心跳未联系时间

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

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

    #1.顺序读测试
    [delopy@hadoop102 ~]# sudo yum install -y fio
    [delopy@hadoop102 ~]# sudo fio -filename=/home/delopy/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):
       READ: bw=360MiB/s (378MB/s), 360MiB/s-360MiB/s (378MB/s-378MB/s), io=20.0GiB (21.5GB), run=56885-56885msec
    结果显示,磁盘的总体顺序读速度为360MiB/s。
    
    #2.顺序写测试
    [delopy@hadoop102 ~]# sudo fio -filename=/home/delopy/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=341MiB/s (357MB/s), 341MiB/s-341MiB/s (357MB/s-357MB/s), io=19.0GiB (21.4GB), run=60001-60001msec
    结果显示,磁盘的总体顺序写速度为341MiB/s。
    
    #3.随机写测试
    [delopy@hadoop102 ~]# sudo fio -filename=/home/delopy/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=309MiB/s (324MB/s), 309MiB/s-309MiB/s (324MB/s-324MB/s), io=18.1GiB (19.4GB), run=60001-60001msec
    结果显示,磁盘的总体随机写速度为309MiB/s。
    
    #4.混合随机读写:
    [delopy@hadoop102 ~]# sudo fio -filename=/home/delopy/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=220MiB/s (231MB/s), 220MiB/s-220MiB/s (231MB/s-231MB/s), io=12.9GiB (13.9GB), run=60001-60001msec
      WRITE: bw=94.6MiB/s (99.2MB/s), 94.6MiB/s-94.6MiB/s (99.2MB/s-99.2MB/s), io=5674MiB (5950MB), run=60001-60001msec
    结果显示,磁盘的总体混合随机读写,读速度为220MiB/s,写速度94.6MiB/s。
    

    四、小文件归档

    1.HDFS存储小文件弊端

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

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

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

    3.案例实操

    #1.需要启动YARN进程
    [delopy@hadoop102 hadoop]$ start-yarn.sh
    
    #2.归档文件
    把/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/output路径下。
    [delopy@hadoop102 hadoop]$ hadoop archive -archiveName input.har -p  /input   /output
    
    #3.查看归档
    [delopy@hadoop102 hadoop]$ hadoop fs -ls /output/input.har
    [delopy@hadoop102 hadoop]$ hadoop fs -ls har:///output/input.har
    
    #4.解归档文件
    [delopy@hadoop102 hadoop]$ hadoop fs -cp har:///output/input.har/*    /
    
  • 相关阅读:
    ios添加第三方字体
    IOS 适应各种iphone屏幕尺寸
    sqlite第三方类库FMDB的使用
    IOS--沙盒机制
    用plist建立UITabController
    Xcode7 使用NSURLSession发送HTTP请求报错[转]
    网络开发--NSURLConnection类的简单介绍
    TF-IDF
    《汇编语言》——王爽 第12章 内中断
    操作系统 L4操作系统接口+L5系统调用的实现(网易公开课)
  • 原文地址:https://www.cnblogs.com/jhno1/p/15246510.html
Copyright © 2020-2023  润新知