hdfs文件系统架构详解

hdfs文件系统架构详解

官方hdfs分布式介绍

NameNode

*Namenode负责文件系统的namespace以及客户端文件访问
*NameNode负责文件元数据操作,DataNode负责文件内容的处理,跟文件有关的额数据不会经过NameNode
*NameNode负责安排数据存在那台机器上,负责控制和调配最近的副本给用户读取(调节hdfs的balance属性,执行balance命令)
	For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. 
	通常,当备份数为3的时候,HDFS的分配策略会将一个放置在本地节点,另一个放在同一个机架的不同节点上,最后一个放置在不同机架的节点上
*NameNode管理数据块的复制,周期性地接收心跳包(3s/次 10分钟GG)和blockreport(1h/次)

Datanode

*一个块保存了两个文件1:元文件(长度,校验,时间戳) 2:数据文件
*可以随时安全加入退出机器
*周期性地发送心跳包(3s/次 10分钟GG)和blockreport(1h/次)
datanode路径如下(由etc/hadoop/core-site.xml文件决定)
	data/tmp/dfs/data/current/BP-1645940924-127.0.1.1-1497948488160/current/finalized/
		-rw-rw-r-- 1 cen cen  3589 6月  20 16:50 blk_1073741825 					#(数据文件)
		-rw-rw-r-- 1 cen cen    39 6月  20 16:50 blk_1073741825_1001.meta		#(元数据)
!!!值得一提的是,文件一旦创建,不能修改文件内容

文件损坏处理

*datanode读取block的时候会计算checksum
*与创建时候的checksum进行比对,若不一致则执行损坏处理
*让客户端读取其他datanode节点的数据
*NameNode标记此block已GG,用其他块数据覆盖本节点
*datanode每三周进行一次cehecksum工作

HDFS-NameNode存储在

*内存
*本地磁盘
	1.fsimage(镜像文件)
	2.edits(编辑日志)

第一次启动HDFS过程详解

0-> format					(初始化文件系统)
1-> fsimage					(生成镜像文件)
2-> Start NameNode 	   (启动NameNode)
    *read fsimage  			(读取镜像文件)

=======>>> SafeMode(进入HDFS文件系统的安全模式)<<<=======
3-> Start DataNode 			(启动DataNode)
    *注册					(向NameNode注册)
    *block report			(向Namenode反馈块报告)

当 DataNodes blocks / total blocks = 99.999%    
=============>>> 30秒 CD 后退出安全模式<<<================
<<<安全模式期间,不能改变文件系统命名空间(元数据),如增 删 改,允许查看文件>>>

4-> create dir XXX  		(用户进行操作时候,内存中保存了修改,同时磁盘中修改了edits)
5-> put files XXX			(同上)
6-> delete files XX 		(同上)

第二次启动HDFS

1-> NameNode
    *read fsimage			(读取镜像文件)
    *read edits				(读取编辑日志)
    *gen write fsimage		(合并编辑日志,生成新的镜像文件,替换原来的文件)
    *gen write edits		(生成空的编辑日志,替换原来的文件)
2-> DataNode
...    
...    
...

SecondaryNameNode

功能:定时合并编辑日志和镜像文件,用于辅助NameNode

手动进入安全模式

    bin/hdfs dfsadmin -safemode <enter | leave | get | wait>
                                                    进入   |离开   |查看状态|等待|
原文地址:https://www.cnblogs.com/cenzhongman/p/7055390.html