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发送消息,表示“我写完了”。这样整个文件写入完毕。
如图所示:
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发送消息,表示“我写完了”。这样整个文件写入完毕。
相关文章推荐
- HDFS 基本文件操作API
- HDFS高级操作命令和工具
- HDFS 文件操作命令格式与注意事项
- HDFS 启动与关闭
- HDFS 可靠性的设计实现
- HDFS 文件操作基础命令
- HBase与HDFS结合使用
- DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command
- HDFS详解
- HDFS快照管理
- 清理Kylin的中间存储数据(HDFS & HBase Tables)
- Hadoop2.7实战v1.0之Linux参数调优
- IMF传奇行动第85课:Spark Streaming第四课:基于HDFS的Spark Streaming案例实战和内幕源码解密
- HDFS写入和读取流程
- HDFS写入和读取流程
- 六:熟悉HDFS基本常用命令(一)
- 七:熟悉HDFS基本常用命令(二)
- HDFS存储容量扩充
- HDFS多用户管理ACL机制other权限访问控制的理解
- HDFS源码分析之FSImage文件内容(一)总体格式