HDFS中的数据写入读出原理
1、HDFS写数据流程
hadoop fs -put /home/bduser/xxx.txt /animals/tiger/
当我们执行上面这条语句时,集群将执行以下几个步骤(以一台NameNode,三台DataNode的完全分布式集群为例)
- 1.1、客户端向NameNode发送请求:上传文件
- 检查该文件是否存在于文件系统,如果存在,则提示该文件已经存在与目标目录下
- 检查该文件上传的目标目录是否存在,如果不存在,则提示没有那个文件或目录
- 1.2、NameNode返回消息
- 如果存在1.1中的两种失败情况,将会返回客户端数据上传失败的原因,客户端将其输出至控制台
- 如果不存在1.1中的两种失败情况,将会返回客户端可以上传文件的消息
- 1.3、客户端接收到1.2返回的可以上传消息后,再次向NameNode发送请求:应当把数据块发送至哪几个DataNode节点上?
- 1.4、NameNode得到1.3的请求会返回几个节点()以及存储位置,例如node01、node02、node03的什么什么路径
- 1.5、客户端得到1.4NameNode返回的信息后将向临近节点发送建立联系的请求,由节点之间一个请求一个的建立起数据通道
- 1.6、如果所有节点的数据通道都建立成功,将返回可以上传数据的消息
- 1.7、客户端得到可以上传数据的消息之后,将第一个block块放入本地内存缓存中,以packet为单位传送至临近的节点上,该节点传给其临近的节点以此类推完成传数据递。(遵循http数据传输协议)
- 1.8、当第一个数据块传输完毕后,将会传输剩余的数据块,重复执行上述步骤。。。
- 1.9、当该文件的所有数据块都上传完毕之后,将会在NameNode上创建该文件的元数据
2、HDFS读数据流程
- 2.1、客户端向NameNode发送请求:下载文件xxx
- 2.2:、NameNode查询元数据,找到文件块的地址,返回目标的元数据
- 2.3、客户端按照就近原则向其中的一台机器发起读数据块1请求
- 2.4、DataNode将数据传输会客户端
- 2.5、客户端按照2.3、2.4、的步骤重复执行读数据块2…
- 2.5、客户端将以packet为单位接收数据块,放入本地缓存,然后存入目标目录