Hadoop笔记:HDFS文件读写流程详解

大数据笔记:HDFS文件读写流程详解

标签: 大数据


通过一个工作流的形式,展示HDFS读写流程

三个角色

client:客户端,发起读写请求,向HDFS中存或取数据。

NameNode:HDFS的核心,唯一的领导,把控全局所有的请求,干什么事都要想它汇报。

DataNode:可以有很多,负责数据的存储。

HDFS写数据

  • 小张和client说:“我要写200MB的数据”

  • client说:“没问题!你的这些数据将会按照128M大小分隔成block,并且以3副本的形式存储!”

  • client开始将数据拆成128M的blocks,余数单独成一个block

  • client现在打算要上传第一个block,他对NameNode说:“你好,请帮我写一个128M的block,并有3个副本”

  • NameNode想了想:“3副本请求的话,我得找三个DataNode来帮我做。” 然后仔细思考了一会

  • NameNode对client说:“哥们!我给你安排了三个DataNode来做这件事,分别是DataNode1、DataNode2、DataNode3,并且我把他们已经按照离你的距离排好序了!”

  • client对DataNode1说:“现在我只向你发送数据”。

  • DataNode1接收存储数据的同时,将相同的数据发送给DataNode2,DataNode也在接收数据的同时将数据发送给DataNode3。当DataNode3写完时,说明第一个Block写完了。(流水线的方式)

  • 一旦当前的Block写完了,DataNode们会向NameNode汇报:已经完成工作。NameNode就掌握了信息:Block已经成功地存储3份了。

  • Client会对剩下的block重复相同的操作。

  • 所有Block都写完了,连接应该关闭了。NameNode将元信息整理并处理好。(元信息:哪些信息分别存储在哪些DataNode上了)

HDFS读数据

  • 小张对client说:“我想要读数据。” client让小张稍等。

  • client对NameNode说:“我给你一个文件名,你把这个文件名的具体信息给我”

  • NameNode给了client具体信息,也就是元信息,其中包括:这些信息一共分为多少个block,每个block的每个副本都存储在哪个DataNode上(DataNode排好序)。

  • client现在知道了所要读的文件,一共需要下载多少block,也知道了每个block分别在哪个DataNode下载。

  • client按顺序地去每个DataNode下载对应的block。如果这个DataNode挂了,或者数据丢失和错误,那么client可以去其他的DataNode获取副本数据。

优缺点

优点

  1. 数据冗余多备份、硬件容错

  2. 处理流式的数据访问,即一次写入多次读取

  3. 适合存储大文件

  4. 构建在廉价机器上

缺点

  1. 低延迟的数据访问

  2. 不适合小文件的存储,因为只要小于128M,就是一个元数据,如果小文件很多,那么元数据很大,NameNode有压力

猜你喜欢

转载自blog.csdn.net/japson_iot/article/details/80467504
今日推荐