Hadoop的HDFS机制

本文介绍了Hadoop的分布式文件系统HDFS,包括NameNode和DataNodes的角色,以及HDFS如何通过NameNode管理文件元数据。在HDFS中,文件被分割为block并由DataNodes存储,NameNode负责元数据管理和故障恢复。HDFS的工作流程包括客户端的写入和读取操作,写入时遵循特定的数据复制策略确保数据可靠性,读取时优先从同一机架的DataNode获取数据。
摘要由CSDN通过智能技术生成

HDFS是Hadoop的分布式文件存储系统,HDFS的组成是通过NameNode与DataNodes来管理,其中NameNode只有一个,用来管理文件系统的元数据,元数据就是一个文件的基本信息,在windows系统中,一个文件的元数据可以通过属性或者通过详细信息可以查看,主要包括:文件名,文件的创建的时间,文件的大小,文件的所有者等。在HDFS中一个文件是被分为不同块来存储的,因此,NanmeNode管理的元数据,包括文件名,文件的大小,文件被分为的block数量,每个block的位置,以及之间的顺序等。

而DataNodes,主要是用来存储具体数据即(block),每个block最大的为128M(在hadoop2.x中,在hadoop1.x中为64M),这里每个集群只有一个NameNode,当NameNode发生故障之后,整个文件系统将无法正常的工作,这时,引入了Secondary NameNode来辅助NameNode,当NameNode发生故障时,通过SecondaryNameNode来进行工作。具体的框架图如下:


HDFS的工作原理:

(1)客户端写入操作:

场景:客户端向hdfs系统写入一个文件file,500M大小,

HDFS分布在三个机架上Rack1,Rack2。

 1) 客户端会根据file的大小按64M分块。分成两块,block1和Block2;

2):客户端NameNode发送写数据请求

3):NameNode节点接受客户端的写入请求,之后记录block信息。并返回可用的DataNode。

   返回的信息(每个block分配的主机名):

    Block1: host2,host1,host3

    Block2: host7,host8,host4

        NameNode具有RackAware机架感知功能,这个可以配置。

DataNode节点存储block的规则:

       a 若client为DataNode节点,那存储block时副本1,同客户端所在的同一个节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;hadoop中默认的是三个副本,但是可以自己配置副本的数量,如果有超过3个,其他副本随机挑选。

        b 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。

4): 客户端向DataNode发送block1数据;发送过程是以流式写入。

    流式写入过程:写入的时候客户端会将每个block按照64k的大小进行分包,包的形式发送给DataNode

        a将64M的block1按64k的package划分;

         b将第一个package发送给host2;

         c host2接收完后,将第一个package发送给host1,同时客户端向host2发送第二个package;

        d host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package。

        e 依次类推,直到将block1发送完毕。

        f 然后 host2,host1,host3向NameNode,同时 host2向客户端发送“block1发送完”通知。

        g 客户端收到host2发来的消息后,向namenode发送“block1 写完”的消息这样就完成了一个block的写入工作。

        h 发送完block1后,再向host7,host8,host4发送block2,具体步骤与block1 一样,这里注意到block1与block2 不一定在同一个主机上,甚至不在同一机架上

        i 发送完block2后,host7,host8,host4向NameNode,host7向客户端发送通知。

        j 客户端向NameNode发送“消息写完”消息。

这里值得注意:

   在执行读或写的过程中,NameNode和DataNode通过HeartBeat(心跳)进行保存通信,确定DataNode活着。如果发现DataNode死掉了,就将死掉的DataNode上的数据,放到其他节点去。读取时,要读其他节点去。

  

(2)客户端读入操作:

读取操作相比写入操作,简洁点。

1).首先客户端NameNode发送读的请求。

2). NameNode看元数据信息,返回file的block的位置以及block的数序

    block1:host2,host1,host3

    block2:host7,host8,host4

3). block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取;

 优选读取本机架上的数据























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值