技.艺.道:“地摊经济”话“HDFS文件读写”

一、HDFS组件介绍

由于这是一篇原创文章,为了保证其原创性(和权威性),我不得不亲手从官网截来一张图:

Namenode:名称节点,作为master,负责namespace管理(其实就是目录结构,这也是叫“namenode的原因”),block管理(其中包括 filename->block,block->datanode list的对应关系)

Datanodes:数据节点,作为slave,负责数据的具体存储

Client:客户端,作为数据读写请求的发起方。

讲到这里,忍不住要作图一幅:

 如果大家视力尚可,应该是可以看得懂的。下面我们讲HDFS的读数据流程。

二、HDFS读数据流程

1.正经流程图

2.流程说明

  1. 客户端->Namenode:请求下载文件a
  2. Namenode->客户端:返回目标文件的元数据,即a文件涉及到哪些数据块,这些数据块存在于哪些Datanode上。
  3. 客户端->Datanode:请求读数据
  4. Datanode->客户端:传输数据

(第3、4步骤通常会进行多次,因为通常一个文件会涉及到多个数据块。这类似于一个订单通常会涉及到多个商品)

3. “地摊场景”类比图

4.对白

客户A:老板,我要一瓶冰阔落、一包辣条、一辆自行车!

老板兼前台:好的,冰阔落在摊位D,辣条在摊位A,自行车在摊位E,您直接去拿就可以啦!

客户A找到摊位D,对摊位D的工作人员说:你好,我要一瓶冰阔落。

摊位D的工作人员从冰箱里取出一瓶冰阔落递到客户A手中,说:您好,这是您要的冰阔落,请拿好哈!

客户A又找到摊位A,对摊位A的工作人员说:你好,我要一包辣条。

摊位A的工作人员从货架上取出一包辣条递到客户A手中,说:您好,这是您要的辣条,请拿好哈!

客户A最后找到摊位E,对摊位E的工作人员说:你好,我要一辆自行车。

摊位E的工作人员从后面推出一辆自行车,交到客户A手中,说:您好,这是您要的自行车,请推好哈!

三、HDFS写数据流程

1.正经流程图

2.流程说明

  1. 客户端->Namenode:请求上传文件a。
  2. Namenode->客户端:返回请求结果。当HDFS未满且运转正常时,会返回“允许上传”,否则返回“不允许上传”。
  3. 客户端->Namenode:请求上传第1个block(数据块,大小可配),申请获取可以存储的Datanode列表。
  4. Namenode->客户端:返回可用的Datanode列表。如dn1,dn2,dn3。
  5. 客户端->Datanode->Datanode->Datanode:请求建立block传输通道。这叫流水线复制机制。即:同一个block块客户只上传一份到某个节点如a,其他某个节点b会从这个结点a复制一份,然后再有其他结点c从该节点b复制,以此类推,直到副本数达到配置文件中设置的值。
  6. Datanode->Datanode->Datanode->客户端:应答成功。
  7. 客户端->Datanode->Datanode->Datanode:传输数据包。
  8. 客户端->Namenode:通知传输完成。

3. “地摊场景”类比图

4.对白

客户A:老板,现在可以寄卖东西吗?

老板兼前台:可以啊!我们店业务正常,且有空位。

客户A:好的,我要寄卖一包辣条!

老板兼前台:找到三个有空位的摊位摊位A,摊位B,摊位C您直接拿过去就可以啦!

客户A找到摊位A,对摊位A的工作人员说:你好,我要寄卖一包辣条。

(摊位A的工作人员听到后,又对摊位B说:嘿老兄,有人要寄卖东西了哈!)

(摊位B的工作人员听到后,又对摊位C说:嘿老妹,有人要寄卖东西了哈!)

摊位A的工作人员对客户A说:好的先生,可以的。您把辣条给我就行了。

(摊位B的工作人员对摊位A的工作人员说:好的老兄,等会辣条来了,我从你这复制一份就可以。)

(摊位C的工作人员对摊位B的工作人员说:好的老兄,等会辣条来了,我从你这复制一份就可以。)

客户A把一包辣条交给了摊位A的工作人员,说:这就是我要寄卖的辣条了,给你。

(摊位A的工作人员把东西复制一份给摊位B的工作人员说:这就是客人要寄卖的辣条了,给你。)

(摊位B的工作人员把东西复制一份给摊位C的工作人员说:这就是客人要寄卖的辣条了,给你。)

客户A临走告诉老板兼前台:老板,要寄卖的东西我已经交给摊位工作人员了哈,我走啦!

好了,我已经没什么好说的了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章