hadoop---hdfs详解(一)
hdfs名词解释:
Block: 在hdfs中文件都是采用分块的方式存储,每个block放在不同的DataNode上,block标识是一个三元组(block ID,numBytes,generationStamp),blockID是唯一的,具体分配由namenode节点设置,然后再由DataNode上建立block文件,同时建立对应的block meta文件。
Packet:在DFSclient与DataNode之间通信的过程中,文件采用的是基于块的方式进行,但数据发送过程中是以packet的方式进行的,每个packet包含了多个chunk,同时对chunk进行checksum计算,生成checksum bytes。
小结:一个文件被拆分成多个block持续化存储;传送数据时一个block又被拆分成多个packet;一个packet包含多个chunk。
packet结构与定义:packet分为两类,一类是实际数据包,另一类是heatbeat数据包,packet数据包的组成结构:
packet由header和data两部分组成,header部分包含packet的概要属性
Data部分是packet的实际数据部分,包含4字节校验和(checksum)和一个chunk部分,chunk部分最大为512字节。
HDFS架构图:
主要包含四类角色:Client,NameNode,SecondaryNameNode,DataNode
HDFS Client:系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据,与DN交互进行数据读写,写数据时文件切分由Client完成。
NameNode:Master节点(元数据节点),是系统唯一的管理者,负责元数据的管理(命名空间和数据块映射信息);配置副本策略;处理客户端请求。
DataNode:数据存储节点(slave节点),存储实际的数据;执行数据块的读写,汇报存储信息给NN
SencondaryNameNode:分担namenode的工作量;是namenode的冷备份;合并fsimage和fsedits然后再分发给namenode。(热备份:b是a的热备份,如果a坏掉,b马上运行代替a的工作。冷备份:b是a的冷备份,如果a坏掉,b不能马上代替a的工作。但b上面存储a的一些信息,可减少a坏掉之后的损失。)
hdfs架构原则:
1.元数据与数据分离:文件本身属性(即元数据)与文件所持有的数据分离。
2.主/从架构:一个hdfs集群是由一个namenode和一定数量的DataNode组成。
3.一次写入多次读取:hdfs中的文件在任何时间只能有一个write。当文件被创建,接着写入数据,最后,一旦文件被关闭,就不能再修改。
4.移动计算比移动数据更划算:数据运算,越靠近数据,执行运算的性能就越好,由于hdfs数据分布在不同机器上,所以为了降低网络消耗并提高系统吞吐量,最佳方式是把运算的执行移到离它处理的数据更近的地方,而不是移动数据。
namenode(管理节点):
namenode维护hdfs文件系统中最重要的两个关系:
1.hdfs文件系统中的文件目录树,以及文件的数块索引,即每个文件对应的数据块列表。
2.数据块和数据节点的对应关系,即某一块数据块保存在哪些数据节点的信息。
namenode管理着DataNode,接受DataNode的注册、心跳、数据块提交等信息的上报,并且在心跳中发送数据块复制、删除、恢复等指令;同时,namenode还为客户端对文件系统目录树的操作和文件数据读写、对hdfs系统进行管理提供支持。
SencondaryNameNode:
定期合并fsimage和edits日志文件大小控制在一个限度下
NameNode响应Secondary namenode请求,将edit log推送给Secondary namenode,开始重新写一个新的edit log
Secondary namenode 收到来自namenode的fsimage文件和edit log
Secondary namenode 将fsimage加载都内存,应用edit log,并生成一个新的fsimage文件
secondary namenode将新的fsimage推送给namenode
namenode 用新的fsimage取代旧的fsimage,在fsimage文件中记下检查点发生的时间