HDFS存储文件的过程详解

    xiaoxiao2022-07-05  169

    以下内容基本都是自己的语言进行描述的,并不全是官方的说法,若有哪里说的不对可以在下面进行交流。

    一 、角色 : Namenode ,DataNode ,Client

      1 NameNode

        namenode 负责维护整个文件系统的信息,包括:整个文件树,文件的块分布信息,文件系统的元数据,数据复制策略等 以下简称NN

    2  DataNode

    存储文件内容,负责文件实际的读写操作,保持与namenode的通信,同步文件块信息 以下简称DN

    3 Client 

      发出存储文件请求 以下简称C  

    二  具体过程

    1  C 向NN发出创建文件请求 客户端可以指定两个变量 ① dfs.replcation :3 ② block.size:128m 【副本数默认为3,块大小默认为128M】 切分文件block【hdfs的传输单位】

    此时NN 要做以下事情:

    (1) 检查C是否有创建文件权限

    (2) 检查目录结构是否可用

    (3) 检查集群是否可用

    (4) 检查租约(HDFS会给每一个客户端一个租约lease,通过租约的持有来限制并行写入文件)

    2  NN在以上校验都通过的情况下会给客户端一个返回确认信息。

    3 客户端拿到确认信息后,发出addblock 操作。

    (1)此时NN会给block分配可以写入的DN信息,分配考虑的因素有  ① 数据可靠性 ② 数据的写入效率 ③ DN的负载均衡策略

    (2)默认的分配DN的策略是:第一个副本存入离客户端最近的机架的DN上,第二个副本存入与第一个副本不同机架上的DN,第三个副本存放在与第二个同一机架上不同DN上。

    4 考虑以上因素后会返回给客户端可写入的DN节点队列。

    5 客户端收到DN队列信息后,以pipeline形式写入block数据。在写入过程中每个步骤都会有ack确认,当得到成功写入副本的数量小于最小写入副本数时,会重新发送此写请求。最小写入副本数默认是1 ,与此同时DN和NN也会进行心跳,对于那些副本小于三的进行副本的生成,生成考虑的策略与选择DN节点需要考虑的一致。

    6 当client收到ack消息确认完成后,向NN汇报block完成。

    7 添加下一个block【从3流程开始】。

    8 最终客户端汇报完成,NN更新文件状态,客户端释放租约

    最新回复(0)