大数据学习十一:HDFS框架

1、HDFS(Hadoop Distributed File System) 分布式文件存储系统,批处理、高吞吐量而非低延迟。它只支持文件追加和删除(一次写多次读),应用距离数据越近,操作速度越快。

2、HDFS三大守护进程(deamon processe)

    NameNode : 

    A:NameNode是HDFS的命名空间,里面存储着整个HDFS的所有文件的元数据信息,这些信息都会加载到内存中,元数据信息分为两部分,第一部分是文件系统树及整棵树内所有的文件和目录,第二部分是每个文件的各个组成块所在的数据节点信息。第一部分会落地形成文件(命名空间镜像文件和编辑日志文件)永久保存,第二部分的信息是在HDFS启动时,DataNode自动报送给NameNode,所以这个不会永久保存。元数据格式如下(/test/a.log是在hdfs文件系统中的路径,3是这个文件的副本数(副本数可以通过在配置文件中的配置来修改的)。在hdfs中,文件是进行分块存储的,如果文件过大,就要分成多块存储,每个块在文件系统中存储3个副本,以上图为例,就是分成blk_1和blk_2两个块,每个块在实际的节点中有3个副本,比如blk_1的3个副本分别存储在h0,h1,h3中)

大数据学习十一:HDFS框架_第1张图片


 此时存在一个问题,随着文件数目的增加,NameNode存在内存中的信息也越来越大,如何保证内存不溢出?

    DataNode : 

    负责存储数据,最小的单位是block , 默认的bocksize=128M , 若文件258M,则共有block=3,实际占有存储258M,最后一块     只占用2M。每个DataNode最多存储的块数=(repication-1)/ (机架数+2),放置位置随机。

     每隔3秒向NameNode发一次心跳,每隔dfs.blockreport.intervalMsec=6h(默然单位ms)向NameNode发送一次blockReport,

     心跳:DataNode向NameNode报告自身信息,如DataNode容量,DataNode DFS容量等,然后NameNode向DataNode返                回DataNode Command,控制DataNode进行一些操作。

     dfs.heartbeat.interval = 3s     ,         heartbeat.recheck.interval = 300000ms (重新检查时间)

     与DataNode连接超时时间= heartbeat*10 + recheck*2,

sendHeartbeat的具体实现:

1. 首先从datanodeMap中获取发送“心跳”的datanodeDescriptor。在获取的过程中,如果datanodeMap获取的Datanode的hostname与正在发送“心跳”的Datanode的hostname不一致,则抛出异常,并向该Datanode返回DNA_REGISTER 命令。

2. 如果从datanodeMap中获取的DatanodeDescriptor不为空,但是该Datanode的是需要shutdown的节点,则将该节点置为dead。

3. 如果获取的DatanodeDescriptor为空,或者DataNodeDescriptor的状态为not live,则向并向该Datanode返回DNA_REGISTER 命令。

4. 如果DatanodeDescriptor正常,则更新FSNamespace以及DatanodeDescriptor的状态,主要包括capacity、dfsUsed、remaining和xceiverCount。

5. 然后,依次获取DNA_RECOVERBLOCK 、DNA_TRANSFER、DNA_INVALIDATE、KeyUpdateCommand、BalancerBandwidthCommand执行命令返回给Datanode。

6. 最后,判断是不是有UpgradeCommand命令,如果有返回给Datanode进行执行。

    追加内容后块的变化,怎么追加,怎么重新设置块大小和replication数目。

  SecondaryNameNode : 


大数据学习十一:HDFS框架_第2张图片

fsimage : 存储NameNode元数据的镜像文件

edits : 存储NameNode的操作日志

fstime : 保存最近一次的checkpoint时间 , checkpoint为fstime和edits文件的合并时间点

检查点:core-site.xml  fs.checkpoint.period=3600(s) 或者 fs.checkpoint.size=64(M) (edits文件)

(1)检查点到来时,NameNode 生成edits.new文件记录新的操作日志(元数据操作),

(2)原edits文件和fsimage文件下载到本地,在内存中合并为fsimage.ckpt文件

(3)DataNode通知NameNode文件fsimage.ckpt已生成,NameNode下载fsimage.ckpt,并替换为fsimage

(4)edit.new文件替换为edit文件

如何恢复NameNode


HDFS架构总图


大数据学习十一:HDFS框架_第3张图片

(1) Client与NameNode通信,NameNode获取数据信息,供Client进行读写操作。

你可能感兴趣的:(大数据学习十一:HDFS框架)