「学习笔记」深入理解Hadoop HDFS的写入&读取机制

  博主按:要理解以下内容,需要掌握namenode,datanode、元数据等概念及HDFS的基本原理。HDFS(Hadoop Distribute File System)是一个分布式文件系统,是Hadoop的重要成员。

  一、HDFS数据写入机制

  向HDFS中写入文件时,是按照块儿为单位的,Client会根据配置中设置的块儿的大小把目标文件切为多块,例如文件是300M ,配置中块大小值为128M,那么就分为3块儿。

  具体写入流程:

  (1)Client向Namenode发请求,说想要上传文件

  (2)NameNode会检查目标文件是否存在、父目录是否存在,检查没有问题后返回确认信息

  (3)Client再发请求,问第一个block应该传到哪些DataNode上

  (4)NameNode经过衡量,返回3个可用的DataNode(A,B,C)

  (5)Client与A建立连接,A与B建立连接,B与C建立连接,形成一个Pipeline

  (6)传输管道建立完成后,Client开始向A发送数据包,此数据包会经过管道一次传递到B和C

  (7)当第一个block的数据都传完以后,client再向NameNode请求第二个block上传到哪些DataNode,然后建立传输管道发送数据

  就这样,直到Client把文件全部上传完成

  二、HDFS数据读取机制

  (1)Client把要读取的文件路径发给Namenode,查询元数据,找到文件块所在的DataNode服务器

  (2)Client知道了文件包含哪几块儿、每一块儿在哪些DataNode上,就选择那些离自己近的DataNode(在同一机房,如果有多个离着近的,就随机选择),请求建立Socket流从DataNode获取数据

  (3)Client接收数据包,先本地缓存,然后写入目标文件直到文件读取完成

  三、NameNode机制

  通过对HDFS读写流程的了解,可以发现NameNode是一个很重要的部分,它记录着整个HDFS系统的元数据,这些元数据是需要持久化的,要保存到文件中。

  NameNode还要承受巨大的访问量,Client读写文件时都需要请求NameNode,写文件时要修改元数据,读文件时要查询元数据。

  为了提高效率,NameNode便将元数据加载到内存中,每次修改时,直接修改内存,而不是直接修改文件,同时会记录下操作日志,供后期修改文件时使用。

  这样,NameNode对数据的管理就涉及到了3种存储形式:

  1. 内存数据

  2. 元数据文件

  3. 操作日志文件

  NameNode需要定期对元数据文件和日志文件进行整合,以保证文件中数据是新的,但这个过程很消耗性能,NameNode需要快速地响应Client的大量请求,很难去完成文件整合操作,这时就引入了一个小助手SecondNameNode。

  SecondNameNode会定期从NameNode中下载元数据文件和操作日志,进行整合,形成新的数据文件,然后传回NameNode,并替换掉之前的旧文件。

  SecondNameNode是NameNode的好帮手,替NameNode完成了这个重体力活儿,并且还可以作为NameNode的一个防灾备份,当NameNode数据丢失时,SecondNameNode上有最近一次整理好的数据文件,可以传给NameNode进行加载,这样可以保证最少的数据丢失。

blob.png

Via: itker.me

华为云优惠多多,更有新用户低至4折,欢迎点击此处或者扫码进入

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: