一、NN与2NN工作机制
NameNode(NN)
1、当HDFS启动时,会加载日志(edits)和镜像文件(fsImage)到内存中。
2-4、当元数据的增删改查请求进来时,NameNode会先将操作记录到日志中,之后再执行内存数据的增删改查
SecondNameNode(2NN)
1、SecondNameNode请求NameNode,请求是否需要checkPoint,checkPoint的触发条件:
- 定时时间到
- 日志文件满了
2-6、请求checkPoint,会将最近写的edits和fsImage拷贝到SecondNameNode本地,加载到内存中合并,生成fsImage.checkpoint。
7-8 将fsImage.checkpoint拷贝到NameNode,并更名为fsImage
二、Fs Image与Edits解析
到/usr/local/hadoop/Hadoop_tmp/dfs/name/current查看日志和fsImage
查看fsImage
hdfs oiv -p XML -i fsimage_0000000000000000131 -o fsimage.xml
得到结果
1000 1006 0 1073741829 131
16424 16385 DIRECTORY 1576421043641 fangzhijie:supergroup:rwxr-xr-x 9223372036854775807 -1
16386 DIRECTORY fzj 1575714994678 fangzhijie:supergroup:rwxr-xr-x -1 -1
16387 DIRECTORY jiagoushi 1575714994678 fangzhijie:supergroup:rwxr-xr-x -1 -1
16392 DIRECTORY tmp 1576021083427 fangzhijie:supergroup:rwx-wx-wx -1 -1
16393 DIRECTORY hive 1576021083443 fangzhijie:supergroup:rwx-wx-wx -1 -1
16394 DIRECTORY fangzhijie 1576022280367 fangzhijie:supergroup:rwx------ -1 -1
16411 DIRECTORY user 1576021954868 fangzhijie:supergroup:rwxr-xr-x -1 -1
16412 DIRECTORY hive 1576021954868 fangzhijie:supergroup:rwxr-xr-x -1 -1
16413 DIRECTORY warehouse 1576021954868 fangzhijie:supergroup:rwxr-xr-x -1 -1
16414 DIRECTORY bigdata 1576021954868 fangzhijie:supergroup:rwxr-xr-x -1 -1
16417 DIRECTORY test 1576326634124 fangzhijie:supergroup:rwxr-xr-x -1 -1
16418 DIRECTORY hdfs 1576327378643 fangzhijie:supergroup:rwxr-xr-x -1 -1
16419 DIRECTORY client 1576326634124 fangzhijie:supergroup:rwxr-xr-x -1 -1
16420 DIRECTORY client1 1576327180252 fangzhijie:supergroup:rwxr-xr-x -1 -1
16421 DIRECTORY client2 1576327378643 fangzhijie:supergroup:rwxr-xr-x -1 -1
16422 FILE hdfs-test123456.xml 3 1576327781065 1576327780439 134217728 fangzhijie:supergroup:rw-r--r-- 1073741827 1004 878
16423 FILE hdfs-test123.xml 2 1576418894630 1576418893994 134217728 fangzhijie:supergroup:rw-r--r-- 1073741828 1005 878
0
16385 16386 16423 16422 16417 16392 16411
16386 16387
16392 16393
16393 16394
16411 16412
16412 16413
16413 16414
16417 16418
16418 16419 16420 16421
16385
0 0 1
查看日志文件
hdfs oev -p XML -i edits_0000000000000000130-0000000000000000131 -o edits.xml
得到结果
-63
OP_START_LOG_SEGMENT
130
OP_END_LOG_SEGMENT
131
三、NameNode故障处理
方案一
kill掉NameNode进程
将SecondNameNode的数据拷贝到NameNode中
重启NameNode
方案二
使用-importCheckpoint选项启动NameNode守护进程,从而将SecondNameNode中数据拷贝到NameNode目录中。
kill -9 NameNode
删除NameNode存储的数据
将SecondNameNode的数据拷贝到NameNode中
四、安全模式
NameNode进入安全模式的话,文件系统是只读的。
如何判断是否是进入安全模式
▶ ./hdfs dfsadmin -safemode get
19/12/21 23:44:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Safe mode is OFF
进入安全模式
local/hadoop/bin
▶ ./hdfs dfsadmin -safemode enter
19/12/21 23:53:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Safe mode is ON
退出安全模式
./hdfs dfsadmin -safemode leave
等待安全模式
./hdfs dfsadmin -safemode wait
等待的意思是,在安全模式状态是ON的时候,阻塞,直到状态变为OFF,阻塞才取消,开始执行后续的操作。
五、NameNode 高可用
dir
六、NameNode的ZKFC机制
dir
七、数据完整性
循环冗余校验(CRC)码
使用CRC校验码来保证数据的完整性。
CRC 算法的基本思想:将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。
CRC码中,校验位(R位)在信息位(K位)后面.
例如,CRC生成多项式为G(X) = X4 + X + 1,要求出二进制序列10110011的CRC校验码。
多项式对应的二进制为10011
10011 为除数,10110011为被除数,按照异或的计算方式,同为0,异为1,则计算过程如下:
最后得到余数0100,即是校验位。那么整个CRC码为:10110011 0100
参考文档
循环冗余校验(CRC)码
HDFS:NameNode的Proxy该怎样做
字节跳动 EB 级 HDFS 实践