HDFS的读写流程

一、简介

  HDFS(Hadoop Distributed File System)是GFS的开源实现。

1.优点:

  能够运行在廉价机器上,硬件出错常态,需要具备高容错性
  流式数据访问,而不是随机读写
  面向大规模数据集,能够进行批处理、能够横向扩展
  简单一致性模型,假定文件是一次写入、多次读取

2.缺点:

  不支持低延迟数据访问
  不适合大量小文件存储(因为每条元数据占用空间是一定的)
  不支持并发写入,一个文件只能有一个写入者
  不支持文件随机修改,仅支持追加写入

3.数据单位:

  block :文件上传前需要分块,这个块就是block,一般为128MB,可以修改。因为块太小:寻址时间占比过高。块太大:Map任务数太少,作业执行速度变慢。它是最大的

      一个单位。

  packet :packet是第二大的单位,它是client端向DataNode,或DataNode的PipLine之间传数据的基本单位,默认64KB。

  chunk :chunk是最小的单位,它是client向DataNode,或DataNode的PipLine之间进行数据校验的基本单位,默认512Byte,因为用作校验,故每个chunk需要带有4Byte

      的校验位。所以实际每个chunk写入packet的大小为516Byte。由此可见真实数据与校验值数据的比值 约为128 : 1。(即64*1024 / 512)

二、HDFS读流程

读详细步骤:

  1、client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
  2、就近挑选一台datanode服务器,请求建立输入流 。
  3、DataNode向输入流中中写数据,以packet为单位来校验。
  4、关闭输入流

三、HDFS写流程

写详细步骤:

  1、客户端向NameNode发出写文件请求。

  2、检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。

    (注:WAL,write ahead log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,

    由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录)

  3、client端按128MB的块切分文件。

  4、client将NameNode返回的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和多个DataNode构成pipeline管道。

    client向第一个DataNode写入一个packet,这个packet便会在pipeline里传给第二个、第三个…DataNode。

    在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点将ack发送给client。

  5、写完数据,关闭输输出流.

  6、发送完成信号给NameNode。

更通俗易懂的图:

四、机架感知(副本节点的选择)

  1. 第一个副本在client所处的节点上。如果客户端在集群外,随机选一个
  2. 第二个副本和第一个副本位于相同机架,随机节点。
  3. 第三个副本位于不同机架,随机节点

五、DFSOutputStream内部原理

1、创建Packet

    Client写数据时,会将字节流数据缓存到内部的缓冲区中,当长度满足一个Chunk大小(512B)时,便会创建一个Packet对象,然后向该Packet对象中写Chunk

  的Checksum校验和数据,以及实际数据块Chunk Data,校验和数据是基于实际数据块计算得到的。每次满足一个Chunk大小时,都会向Packet中写上述数据内容,

  直到达到一个Packet对象大小(64K),就会将该Packet对象放入到dataQueue队列中,等待DataStreamer线程取出并发送到DataNode节点。

2、发送Packet

    DataStreamer线程从dataQueue队列中取出Packet对象,放到ackQueue队列中,然后向DataNode节点发送这个Packet对象所对应的数据

3、接收ack

    发送一个Packet数据包以后,会有一个用来接收ack的ResponseProcessor线程,如果收到成功的ack,则表示一个Packet发送成功,ResponseProcessor线程会将

  ackQueue队列中对应的Packet删除,在发送过程中,如果发生错误,所有未完成的Packet都会从ackQueue队列中移除掉,然后重新创建一个新的Pipeline,排除掉出错的

  那些DataNode节点,接着DataStreamer线程继续从dataQueue队列中发送Packet。

(0)

相关推荐

  • day21 网络编程(下)

    版权声明:本博客转载自路飞学城Python全栈开发培训课件,仅用于学习之用,严禁用于商业用途. 欢迎访问路飞学城官网:https://www.luffycity.com/ 课程目标:学会网络编程开发的 ...

  • Hadoop_HDFS_02

    Hadoop_HDFS_02

  • HDFS的读写流程图

    @[TOC]( HDFS的读写流程 ) 1) hdfs的数据写入流程: 1. 客户端发送写入请求给namenode2. namenode接收到请求, 然后首先判断当前操作的用户是否具有写入的权限, 如 ...

  • hdfs读写文件过程

    文件参考:https://www.cnblogs.com/tgzhu/p/5788634.html 以写入100M文件为例: Client将FileA按64M分块.分成两块,block1和Block2 ...

  • 大数据开发之HDFS分布式文件存储系统详解

    HDFS(Hadoop Distributed File System)分布式文件存储系统,主要为各类分布式计算框架如Spark.MapReduce等提供海量数据存储服务,同时HBase.Hive底层 ...

  • hdfs的读写流程分析总结

    HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端).Namenode(名称节点).Datanode(数据节点)和Seco ...

  • 一种无法复制、无法破解的IC卡数据算法和读写流程

    此算法和流程基于最常见的MD5算法.无法复制和篡改数据. 基础知识可参考另外两篇文章. 1.MD5简介和不可逆原因,以及攻防手段 2.梯控.IC卡滚动码防复制原理和破解 没有基础可以先阅读以上两篇文章 ...

  • 外部高速缓存SDRAM的基本读写流程

    随着目前数字技术的发展,多通道数据的高速采集处理获得了广泛的应用,面对大的数据吞吐量,往往需要共享一块大的缓存空间(外挂的大容量存储SDRAM或是DDR).而大多时候多通道之间的实时数据流量并不一定平 ...

  • 无线读写器FCC-ID认证办理流程及费用

    读写器办理FCC-ID证书要经历哪些流程,需要多少费用?近期有不少客户前来办理读写器FCC-ID认证,但自身对FCC-ID认证的流程及费用并不熟悉.不要紧,今天就以无线读写器为例,为大家讲述下FCC- ...

  • 深圳盐田港进口榴莲报关流程手续

    榴莲进口报关所需资料如下: 1.提单.箱单.发票.合同 2.原产地证 3.卫生证(带壳不需要) 4.植检证 5.中文标签 榴莲一般贸易进口流程如下: 1.签订进口合同.外商准备相关单据(产地证.植检证 ...

  • 汽车是怎么开发出来的?浅谈汽车开发流程

    许良  汽车话题下的优秀答主你知道汽车是怎么开发出来的吗?你的脑海中很可能浮现出来这样一个画面:一个非常有艺术气息的设计师,在草图上帅气的描绘着看起来非常犀利的线条.对,但不全对.对于汽车工程师的我而 ...

  • 2021年三亚养猪补贴对象、标准及申请流程介绍!

    近几年随着猪价的上涨,养猪户也越来越多,但是目前生猪养殖成本大幅上升,市场猪肉价格居高不下,为了鼓励生猪养殖,很多地区发布了一系列的养猪补贴政策,今天就给大家介绍一下2021年三亚生猪养殖补贴政策及养 ...