1)需求
NameNode
进程挂了并且存储的数据也丢失了
2)故障模拟
(1)kill -9 NameNode
进程
kill -9 19886
(2)删除NameNode
储存的数据
rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
3)问题解决 原文:sw-code
(1)拷贝SecondaryNameNode
中的数据到原NameNode
存储数据目录
[hadoop@hadoop102 dfs]$ scp -r hadoop@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
(2)重新启动NameNode
[hadoop@hadoop102 dfs]$ hdfs --daemon start namenode
(3)向集群上传一个文件
注意:生产环境一般是NameNode
的高可用,即配置多个NameNode
来处理此类情况
1)安全模式:文件系统只接受读数据请求,而不接受删除、修改等变更请求
2)进入安全模式场景
NameNode
在加载镜像文件和编辑日志期间处于安全模式。NameNode
在接收DataNode
注册时,处于安全模式。
3)退出安全模式条件
dfs.namenode.safemode.min.datanodes
:最小可用的datanode
数量大于0,默认0。
dfs.namenode.safemode.threshold-pct
:副本达到最小要求的block
占系统总block
的百分比,默认0.999f。(只允许丢一个块)
dfs.namenode.safemode.extension
:稳定时间,默认值3000ms,即30s。
4)基本语法
集群处于安全模式,不能执行重要操作(写操作),集群启动完成后,自动退出安全模式。
bin/hdfs dfsadmin -safemode get
bin/hdfs dfsadmin -safemode enter
bin/hdfs dfsadmin -safemode leave
bin/hdfs dfsadmin -safemode wait
慢磁盘监控
找出哪块磁盘慢的方法如下
1)通过心跳未联系时间
一般出现慢磁盘现象,会影响到DataNode
与NameNode
之间的心跳,正常情况下心跳时间间隔是3s。超过2s说明有异常。
2)fio命令,测试磁盘的读写性能
使用该命令安装测试工具
sudo yum install -y fio
(1)顺序读测试
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/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=106MiB/s (111MB/s), 106MiB/s-106MiB/s (111MB/s-111MB/s), io=6334MiB (6642MB), run=60003-60003msec
注意更改路径:-filename=/home/your username/test.log
(2)顺序写测试
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/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=106MiB/s (111MB/s), 106MiB/s-106MiB/s (111MB/s-111MB/s), io=6351MiB (6660MB), run=60002-60002msec
(3)随机写测试
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/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=93.1MiB/s (97.6MB/s), 93.1MiB/s-93.1MiB/s (97.6MB/s-97.6MB/s), io=5584MiB (5855MB), run=60004-60004msec
(3)混合随机读写测试
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/test.log -direct=1 -iodepth 1 -thread -rw=randrw -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=44.9MiB/s (47.1MB/s), 44.9MiB/s-44.9MiB/s (47.1MB/s-47.1MB/s), io=2697MiB (2828MB), run=60002-60002msec
WRITE: bw=44.0MiB/s (47.2MB/s), 44.0MiB/s-44.0MiB/s (47.2MB/s-47.2MB/s), io=2700MiB (2831MB), run=60002-60002msec
小文件归档
1)HDFS存储小文件弊端:100个1K文件块和100个128M的文件块,占用NN内存大小一样
每个文件按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效。因为大量的小文件会耗尽NameNode中的大部分内存。但注意,存储小文件所需的磁盘容量和数据块大小无关。例如,一个1MB的文件设置未128MB的块存储,实际使用的是1MB的磁盘空间,而不是128MB。
2)解决存储小文件办法之一
HDFS存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许堆文件进行透明访问。具体说来,HDFS存档文件对内还是一个独立文件,对NameNode而言却是一个整体,减少了NameNode的内存。
3)实操案例
(1)需要启动YARN进程
start-yarn.sh
(2)归档文件
把/input
目录里面的所有文件归档成一个叫input.har
的归档文件,并把归档后的文件存储到/output
目录下
hadoop archive -archiveName input.har -p /input /output
(3)查看归档
hadoop fs -ls har:///output/input.har
(4)拷贝文件
hadoop fs -cp har:///output/input.har/test.txt /
【文章转自香港云服务器 http://www.1234xp.com 复制请保留原URL】