HDFS读写数据流程
一、HDFS写数据流程
- 客户端发起请求上传文件
- namenode检查目录树是否可以创建文件(1.检查权限,2检查目录树结构,目录是否存在)并响应客户端是否可上传
- 客户端对文件进行分操作形成block块
- 请求上传第一个block,请求返回datanode(上传的数据真实存储的地址)
- 根据机架感应原理,网络拓扑关系,副本机制,找到相应可以上传的datanode连接列表,返回给客户端。
- 根据返回的连接列表 客户端请求与第一台机器建立block传输通道
- datanode连接列表一次进行连接形成一条完整的pipeline管道
- 客户端,将第一个数据包packet(64k 由(chunk512b+chunksum4b)组成)发送数据,然后依次由服务器进行管道传输,服务器会自我保存一份
- 第一个请求完成之后,建立一条反向应答通道,ack应答机制
10.第一个请求完成之后,开始继续发送packet,当第一个block发送完成后,此时client重新向namenode发送请求,获取第二个block应该存储到哪个datanode中,接着开始从第5步不断执行,直到所有的block完全写入。
二、节点距离计算
到达共同祖先
Distance(d1/r2/n0,d1/r3/n0)=4
三、机架感知
机架感知是一种计算不同计算节点(TaskTracker)的距离的技术,用以在任务调度过程中尽量减少网络带宽资源的消耗,这里用尽量,想表达的是当一个TT(TaskTracker)申请不到本地化任务时,JT(JobTracker)会尽量调度一个机架的任务给他,因为不同机架的网络带宽资源比同一个机架的网络带宽资源更可贵。
第一个副本选择在client所处的节点上,如果客户端在集群外随机选一个
第二个副本在另一个机架的随机节点上
第三个在第二个副本所在的机架的随机节点上
四hdfs读取数据流程
1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验)。
4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。