HDFS浅谈

    xiaoxiao2026-06-08  0

    最近在做关于HBase的开发,由于HBase是基于HDFS的,所以对这方面进行了学习。

    下面是总结的思维导图:

    一、结构

    hdfs的结构主要分三块:Client,NameNode (NN),DataNode  (DN)

     Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。

     

      Namenode:元数据节点,是系统唯一的管理者。负责元数据的管理;与client交互进行提供元数据查询;分配数据存储节点等。

     

      Datanode:数据存储节点,负责数据块的存储与冗余备份;执行数据块的读写操作等。

    其中namenode内存中存储的是=fsimage+edits。

    fsimage:元数据镜像文件(文件系统的目录树。)

    edits:元数据的操作日志(针对文件系统做的修改操作记录)

    SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode,缓解namenode工作量。是namenode的冷备份。

    二、写数据

    1.用户定义数据块大小(默认为128M),定义副本数(默认为3份)

    2.Client对文件进行切分

    3.Client对NN进行请求,NN为每个数据块分配DN

    4.Client对第一个DN发送数据块,第一个DN再把数据块传给第二个数据块,以此类推。每个DN收到数据包后都给Client一个应答,这是为了写数据容错,没有应答时Client会调整路线。

    (这地方有些不确定,有的博客说发给NN确认,有的博客说第一个节点发给client确认,全部给NN确认,各有各的说法)

    三、读数据

    1.Client先联系NN,给NN文件名,NN查找出该文件的数据块表(记录了没给数据块对应的DN)传给Client

    2.Client通过该表下载。可以通过数据块表进行读操作容错,也就是在某DN无法下载时换个节点下载。

    四、故障发现

    1.节点失效:心跳

    2.通信故障:确认码

    3.数据错误:总校验和

    五、故障处理

    在NN中存储着数据块表和DN列表(每个DN储存的数据块),当发生某个DN上的一个数据块错误时,更新数据块表,也就是从数据块表中删除这个数据块,如果发现DN失效时同时更新两个表。

    NN周期扫描数据块表,发现没有按要求复制的数据块,分配DN对其复制。

    六、备份规则

    如果写入方在集群的节点上那么副本1就和其同机架,如果不是则随机。保证其他副本与副本1不同机架。

    可以参考http://blog.csdn.net/mtchy/article/details/51352292  这篇转载文章用漫画解读了HDFS机制。

    转载请注明原文地址: https://ju.6miu.com/read-1310324.html
    最新回复(0)