注意:采用三台服务器即可,恢复到 Yarn 开始的服务器快照,
NameNode 进程挂掉了并且存储的数据也丢失了,如何恢复 NameNode
[fickler@hadoop102 ~]$ kill -9 2043
2043:对应 NameNode 的进程号
[fickler@hadoop102 ~]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
[fickler@hadoop102 dfs]$ scp -r fickler@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
[fickler@hadoop102 dfs]$ hdfs --daemon start namenode
如果仅是进程挂掉了,那么直接重启 NameNode 即可,但是如果 NameNode 的数据也丢失了,那么直接重启进行是不能够恢复的,需要按照上述步骤操作,才能恢复 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 秒
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
[fickler@hadoop102 dfs]$ myhadoop.sh stop
[fickler@hadoop102 dfs]$ myhadoop.sh start
需求:数据块损坏,进入安全模式,如何处理
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1846937455-192.168.10.102-1662454118512/current/finalized/subdir0/subdir0
目录,统一删除某 2 个块信息[fickler@hadoop103 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1846937455-192.168.10.102-1662454118512/current/finalized/subdir0/subdir0
[fickler@hadoop103 subdir0]$ rm -rf blk_1073741825 blk_1073741825_1001.meta
[fickler@hadoop103 subdir0]$ rm -rf blk_1073741826 blk_1073741826_1002.meta
说明:hadoop103、hadoop104 重复执行以上命令
[fickler@hadoop103 subdir0]$ myhadoop.sh stop
[fickler@hadoop103 subdir0]$ myhadoop.sh start
[fickler@hadoop103 subdir0]$ hdfs dfsadmin -safemode get
Safe mode is ON
[fickler@hadoop103 subdir0]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
需求:模拟等待安全模式
[fickler@hadoop103 hadoop-3.1.3]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
[fickler@hadoop103 hadoop-3.1.3]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[fickler@hadoop103 hadoop-3.1.3]$ vim safemode.sh
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
[fickler@hadoop103 hadoop-3.1.3]$ chmod 777 safemode.sh
[fickler@hadoop103 hadoop-3.1.3]$ ./safemode.sh
[fickler@hadoop103 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave
Safe mode is OFF
“慢磁盘” 指的是谢谢如数据非常慢的一类磁盘。其实慢性磁盘并不少见,当机器运行时间长了,上面跑的任务多了,磁盘的读写性能自然会退化,严重时就会出现写入数据延时的问题。
如何发现慢磁盘?
正常在 HDFS 上创建一个目录,只需要不到 1s 的时间。如果你发现创建目录超过 1 分钟以上,而且这个现象并不是每次都有。只是偶尔慢了一下,就很有可能存在慢磁盘。
一般出现慢磁盘现象,会影响到 NameNode 与 DataNode 之间的心跳。正常情况心跳时间间隔是 3s。超过 3s 说明有异常。
[fickler@hadoop103 ~]$ sudo yum install -y fio
[fickler@hadoop103 ~]$ sudo fio -filename=/home/fickler/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
[fickler@hadoop102 ~]$ sudo fio -filename=/home/fickler/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
[fickler@hadoop102 ~]$ sudo fio -filename=/home/fickler/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
[fickler@hadoop102 ~]$ sudo fio -filename=/home/fickler/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
每个文件均按块存储,每个块的元数据存储在 NameNode 的内存中,因此 HDFS 存储小文件会非常低效。因为大量的小文件会耗尽 NameNode 中的大部分内存。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个 1MB 的文件设置为 128MB 的块存储,实际使用的是 1MB 的磁盘空间,而不是 128MB。
HDFS 存档文件或 HAR 文件,是一个更高效的文件存档工具,它将文件存入 HDFS 块,在减少 NameNode 内存使用的同时,运行对文件进行透明的访问。具体来说,HDFS 存档文件对内还是一个一个独立文件,对 NameNode 而言却是一个整天,减少了 NameNode 的内存。
[fickler@hadoop103 hadoop-3.1.3]$ start-yarn.sh
[fickler@hadoop103 hadoop-3.1.3]$ hadoop archive -archiveName input.har -p /input /output
[fickler@hadoop103 hadoop-3.1.3]$ hadoop fs -ls /output/input.har
[fickler@hadoop103 hadoop-3.1.3]$ hadoop fs -ls har:///output/input.har
[fickler@hadoop103 hadoop-3.1.3]$ hadoop fs -cp har:///output/input.har/* /