您的位置:首页 > 大数据 > Hadoop

HDFS 读写数据详细步骤

2016-05-04 19:53 411 查看
读取数据:



如图所示:

client 要从datanode 上读取file ,而file是由block1 和block2 组成的。其中block1 在datanode 的存储位置是 host2,host1,host3; block2 在datanode 的存储位置是 host7,host8,host4;

它的读取流程如下:

client 向namenode 发送读取请求,并告诉它要读取的文件(在此之前Hadoop 对client 有一个身份验证)

namenode 查看Metadata 信息,确认文件存在且用户对其有访问权限,namenode 会告诉client 这个文件的第一块数据块的标号和保存该数据块的datanode 列表(这个列表是按照datanode 与client 距离进行了排序)

client 便访问最合适的datanode,读取到需要的数据块。然后这个过程一直重复,直到读取完所有数据块为止。

写入数据:



写入数据的流程:

client 将file 分块,分为两块block1,block2

client 向namenode 发送写入数据请求

namenode 记录block信息,返回可用的datanode :

block1 :host2,host1,host3 ;block2:host7,host8,host4

原理:

若client为datanode节点,那存储block时,规则为:副本1,同client的机架节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。

若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个机架节点上;副本2,不同副本1的机架机架上;副本3,同副本2相同的另一个机架节点上;其他副本随机挑选。

client 向datanode 发送block1,发送过程采用流式发送。

将64M的block1按64k的package划分;

然后将第一个package 发送给host2

host2 接收之后,将第一个package发送给host1,同时client 向host2发送第二个package

host1接收完第一个package之后,发送给host3,同时接收host2发来的第二个package

循环往复,一直到将block1发送完毕为止。

host2,host1,host3向NameNode,host2向Client发送通知,表示“消息发送完了”。

client收到host2发来的消息后,向namenode发送消息,表示“我写完了”。这样block1就真完成了。

发送完block1后,再向host7,host8,host4发送block2

发送完block2后,host7,host8,host4向NameNode,host7向Client发送通知

client向NameNode发送消息,表示“我写完了”。这样整个文件写入完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: