Hadoop启蒙:HDFS读写流程
Posted 码农小诚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop启蒙:HDFS读写流程相关的知识,希望对你有一定的参考价值。
简介
HDFS是基于谷歌的"GFS"论文的开源实现的一个分布式文件系统。
优点:
适合存储大量数据。
可以运行在廉价计算机上。
3.易扩展、高容错。
缺点:
不支持修改,只能追加。
小文件过多会降低性能,会导致内存中的元数据量增多,会对mapReduce计算造成影响。
一个文件同一时间只能一个客户端操作。
NameNode:
管理文件元数据,并将元数据保存在内存中,以便对外提供更快速的服务
通过专门的持久化机制保证数据的安全。
DataNode:
负责存储数据,文件会按照特定大小切分成多个Block,DataNode就负责存储这些Block和它们的副本。
定期与NameNode保持心跳,以及向NameNode汇报自己的Block信息。
一、写流程
客户端向nameNode申请写入文件。
客户端收到nameNode的响应后,开始准备上传文件,按128M的大小将文件切分成若干个block块,先去询问nameNode第一个block块放哪几台dataNode。
nameNode收到上传请求后,会返回三台可用的dataNode节点信息。
客户端收到dataNode的节点信息后,会与最近的一台dataNode建立pipeline连接。
第一台dataNode会继续与下一台dataNode建立连接,下一台再与下一台建立连接,整个传输通道连接建立完毕后会依次返回客户端。
客户端将第一个block发送到第一台dataNode,并以packet(64kb)为基本单位发送。
dataNode在收到packet后,会按照516B为一个chunk进行数据校验,其中512B是数据,4B是校验位。
dataNode1每收到一个packet后本地保存,然后转发给dataNode2并开始接收下一个packet,dataNode2接收完毕后再转发给dataNode3。
当一个block块传输完毕后,dataNode会给客户端发送响应,同时各个DataNode分别向nameNode汇报自己的block,然后客户端开始上传下一个block,重复3~9过程。
客户端收到所有block上传完毕后,客户端断开连接,通知NameNode文件上传完毕。
二、读流程
客户端向NameNode发送读请求,获取文件的元数据。
NameNode将文件的所有block块所在的DataNode以列表形式返回客户端,并按距离排序。
客户端就近挑选一台DataNode建立输入流。
客户端同样以packet为基本单位来接收并校验。
客户端将下载的所有block块先缓存在本地,然后再写入到最终文件。
传输完成后关闭输入流。
以上是关于Hadoop启蒙:HDFS读写流程的主要内容,如果未能解决你的问题,请参考以下文章