HDFS 系列三:HDFS 数据流

3. HDFS 数据流

3.1 HDFS 写数据流程

3.1.1 剖析文件写入

  1. Client 向 NameNode 通信请求上传文件,NameNode 检查目标文件是否已经存在,父目录是否已经存在

  2. NameNode 返回是否可以上传

  3. Client 先对文件进行切分,请求第一个 block 该传输到哪些 DataNode 服务器上

  4. NameNode 返回3个 DataNode 服务器 DataNode 1,DataNode 2,DataNode 3

  5. Client 请求3台中的一台 DataNode 1(网络拓扑上的就近原则,如果都一样,则随机挑选一台DataNode)上传数据(本质上是一个RPC调用,建立pipeline),DataNode 1 收到请求会继续调用 DataNode 2,然后 DataNode 2 调用 DataNode 3,将整个 pipeline 建立完成,然后逐级返回客户端

  6. Client 开始往 DataNode 1 上传第一个 block (先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位。写入的时候 DataNode 会进行数据校验,它并不是通过一个 packet 进行一次校验而是以 chunk 为单位进行校验(512byte)。DataNode 1 收到一个 packet 就会传给 DataNode 2,DataNode 2 传给 DataNode 3,DataNode 1 每传一个 packet 会放入一个应答队列等待应答

  7. 当一个 block 传输完成之后,Client 再次请求 NameNode 上传第二个block的服务器

3.1.2 网络拓扑概念

在本地网络中,两个节点被称为“彼此近邻”是什么意思?

在海量数据处理中,其主要限制因素是节点之间数据的传输速率——带宽很稀缺

这里的想法是将两个节点间的带宽作为距离的衡量标准

节点距离:两个节点到达最近的共同祖先的距离总和

例如,假设有 数据中心d1 机架r1 中的节点 n1,该节点可以表示为/d1/r1/n1,利用这种标记,这里给出四种距离描述:

Distance(/d1/r1/n1, /d1/r1/n1)=0(同一节点上的进程)
Distance(/d1/r1/n1, /d1/r1/n2)=2(同一机架上的不同节点)
Distance(/d1/r1/n1, /d1/r3/n2)=4(同一数据中心不同机架上的节点)
Distance(/d1/r1/n1, /d2/r4/n2)=6(不同数据中心的节点)

image

3.1.3 机架感知(副本节点选择)

官方介绍:

http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/RackAwareness.html
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication
3.1.3.1 低版 本Hadoop 副本节点选择

第一个副本在 Client 所处的节点上,如果客户端在集群外,随机选一个

第二个副本和第一个副本位于不相同机架的随机节点上

第三个副本和第二个副本位于相同机架,节点随机

image

3.1.3.2 Hadoop 2.9.2 副本节点选择

第一个副本在 Client 所处的节点上,如果客户端在集群外,随机选一个。

第二个副本和第一个副本位于相同机架,随机节点

第三个副本位于不同机架,随机节点

image

3.2 HDFS 读数据流程

  1. 与 NameNode 通信查询元数据,找到文件块所在的 DataNode 服务器

  2. 挑选一台 DataNode(网络拓扑上的就近原则,如果都一样,则随机挑选一台 DataNode)服务器,请求建立 socket 流

  3. DataNode 开始发送数据(从磁盘里面读取数据放入流, packet(一个 packet 为64kb)为单位来做校验)

  4. 客户端以 packet 为单位接收,先在本地缓存,然后写入目标文件

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值