一、HDFS组件介绍
由于这是一篇原创文章,为了保证其原创性(和权威性),我不得不亲手从官网截来一张图:
Namenode:名称节点,作为master,负责namespace管理(其实就是目录结构,这也是叫“namenode的原因”),block管理(其中包括 filename->block,block->datanode list的对应关系)
Datanodes:数据节点,作为slave,负责数据的具体存储
Client:客户端,作为数据读写请求的发起方。
讲到这里,忍不住要作图一幅:
如果大家视力尚可,应该是可以看得懂的。下面我们讲HDFS的读数据流程。
二、HDFS读数据流程
1.正经流程图
2.流程说明
- 客户端->Namenode:请求下载文件a
- Namenode->客户端:返回目标文件的元数据,即a文件涉及到哪些数据块,这些数据块存在于哪些Datanode上。
- 客户端->Datanode:请求读数据
- 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.流程说明
- 客户端->Namenode:请求上传文件a。
- Namenode->客户端:返回请求结果。当HDFS未满且运转正常时,会返回“允许上传”,否则返回“不允许上传”。
- 客户端->Namenode:请求上传第1个block(数据块,大小可配),申请获取可以存储的Datanode列表。
- Namenode->客户端:返回可用的Datanode列表。如dn1,dn2,dn3。
- 客户端->Datanode->Datanode->Datanode:请求建立block传输通道。这叫流水线复制机制。即:同一个block块客户只上传一份到某个节点如a,其他某个节点b会从这个结点a复制一份,然后再有其他结点c从该节点b复制,以此类推,直到副本数达到配置文件中设置的值。
- Datanode->Datanode->Datanode->客户端:应答成功。
- 客户端->Datanode->Datanode->Datanode:传输数据包。
- 客户端->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临走告诉老板兼前台:老板,要寄卖的东西我已经交给摊位工作人员了哈,我走啦!
好了,我已经没什么好说的了。