美文网首页我爱编程
大数据学习十一:HDFS框架

大数据学习十一:HDFS框架

作者: RacyFu | 来源:发表于2018-05-22 13:40 被阅读0次

    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中)

     此时存在一个问题,随着文件数目的增加,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 : 


    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架构总图


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

    相关文章

      网友评论

        本文标题:大数据学习十一:HDFS框架

        本文链接:https://www.haomeiwen.com/subject/ubmhjftx.html