精华内容
下载资源
问答
  • HDFS文件读写原理

    2021-06-02 17:30:27
    下面,我们根据上图,分别讲解HDFS文件读数据和写数据的原理。 1.HDFS写数据原理 在我们把文件上传到HDFS系统中,HDFS究竟是如何存储到集群中去的,又是如何创建备份的,接下来我们来学习客户端向H

    Client(客户端)对HDFS中的数据进行读写操作,分别是Client从HDFS中查找数据,即为Read(读)数据;Client从HDFS中存储数据,即为Write(写)数据。下面我们对HDFS的读写流程进行详细的介绍。假设有一个文件1.txt文件,大小为300M,这样就划分出3个数据块,如下图所示。
    在这里插入图片描述
    下面,我们根据上图,分别讲解HDFS文件读数据和写数据的原理。

    1.HDFS写数据原理

    在我们把文件上传到HDFS系统中,HDFS究竟是如何存储到集群中去的,又是如何创建备份的,接下来我们来学习客户端向HDFS中的写数据的流程。
    在这里插入图片描述
    从中我们可以分析出,HDFS中的写数据流程可以分为12个步骤,具体如下:

    (1) 客户端发起文件上传请求,通过RPC(远程过程调用)与NameNode建立通讯。

    (2) NameNode检查元数据文件的系统目录树。

    (3) 若系统目录树的父目录不存在该文件相关信息,返回客户端可以上传文件。

    (4) 客户端请求上传第一个Block数据块,以及数据块副本的数量(可以自定义副本数量,也可以使用集群规划的副本数量)。

    (5) NameNode检测元数据文件中DataNode信息池,找到可用的数据节点(DataNode_01,DataNode_02,DataNode_03)。

    (6) 将可用的数据节点的IP地址返回给客户端。

    (7) 客户端请求3台节点中的一台服务器DataNode_01,进行传送数据(本质上是一个RPC调用,建立管道Pipeline),DataNode_01收到请求会继续调用服务器DataNode_02,然后服务器DataNode_02调用服务器DataNode_03。

    (8) DataNode之间建立Pipeline后,逐个返回建立完毕信息。

    (9) 客户端与DataNode建立数据传输流,开始发送数据包(数据是以数据包形式进行发送)。

    (10) 客户端向DataNode_01上传第一个Block数据块,是以Packet为单位(默认64K),发送数据块。当DataNode_01收到一个Packet就会传给DataNode_02,DataNode_02传给DataNode_03; DataNode_01每传送一个Packet都会放入一个应答队列等待应答。

    (11) 数据被分割成一个个Packet数据包在Pipeline上依次传输,而在Pipeline反方向上,将逐个发送Ack(命令正确应答),最终由Pipeline中第一个DataNode节点DataNode_01将Pipeline的 Ack信息发送给客户端。

    (12) DataNode返回给客户端,第一个Block块传输完成。客户端则会再次请求NameNode上传第二个Block块和第三块到服务器上,重复上面的步骤,直到3个Block都上传完毕。

    小提示:

    Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其他某一节点上一份,不同机架的某一节点上一份。

    Ack:检验数据完整性的信息。

    2.HDFS读数据流程

    在前面我们已经知道客户端向HDFS写数据的流程,接下来我们来学习客户端从HDFS中读数据的流程。
    在这里插入图片描述
    由此,HDFS中的读数据流程可以分为4个步骤,具体如下:

    (1) 客户端向NameNode发起RPC请求,来获取请求文件Block数据块所在的位置。

    (2) NameNode检测元数据文件,会视情况返回Block块信息或者全部Block块信息,对于每个Block块,NameNode都会返回含有该Block副本的DataNode地址。

    (3) 客户端会选取排序靠前的DataNode来依次读取Block块(如果客户端本身就是DataNode,那么将从本地直接获取数据),每一个Block都会进行CheckSum(完整性验证),若文件不完整,则客户端会继续向NameNode获取下一批的Block列表,直到验证读取出来文件是完整的,则Block读取完毕。

    (4) 客户端会把最终读取出来所有的Block块合并成一个完整的最终文件(例如:1.txt)。

    小提示:

    NameNode返回的DataNode地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序。排序有两个规则:网络拓扑结构中距离客户端近的则靠前;心跳机制中超时汇报的DataNode状态为无效的,则排靠后。

    大数据入门视频教程

    展开全文
  • hdfs读写文件原理

    2021-03-13 12:48:36
    hdfs写数据原理hdfs写数据原理图说明 1.客户端发起请求,namenode需要检测是否可以上传(磁盘大小,节点检查等) 2.namenode检查完毕,觉得可以上传,那么会返回hdfs系统的一些配置,客户端需要根据这些要求(文件块大小...

    hdfs写数据原理图

    在这里插入图片描述

    hdfs写数据原理图说明

    1.客户端发起请求,namenode需要检测是否可以上传(磁盘大小,节点检查等)
    2.namenode检查完毕,觉得可以上传,那么会返回hdfs系统的一些配置,客户端需要根据这些要求(文件块大小之类的)进行上传
    3.客户端根据namenode要求,对a.mp4进行切块,比如namenode返回block.size=128M,
    客户端上传文件大小是300M, 那么需要切分为(128,128,44),分别上传.
    4.接收到客户端上传分片请求,namenode根据自己管理的datanode节点情况(节点距离,副本数量),
    返回对应的数据节点,返回数据节点的数量取决于客户端配置的副本数量,如果客户端只要将上传文件有两个副本,那么namenode会返回三个datanode地址.
    5.客户端上传block,客户端根据拿到的namenode返回的nodenode地址发起上传文件的io请求,
     开始上传数据块.
    //3.4.5是一个循环,根据切块数量,不断执行3-5步骤 
    

    hdfs读数据原理图

    在这里插入图片描述

    hdfs读数据原理图说明

    1.客户端请求下载a.mp4,namenode进行校验文件是否存在等检查
    2.namenod检查完毕,返回要读取文件的原始数据,主要包括数据分块信息和节点分布信息
    3.客户端使用文件元数据向datanode发起读取文件块的请求,所有块读取完毕后,合并为一个完整
    的可用文件
    

    总结

    1.hdfs文件读写都是分块处理,多副本的形式进行分布式存储, 体现了分布式文件系统高可用
    2.hdfs文件读写客户端可以并发访问datanode, 读写速度是所有datanode之和,体现了分布式文件系统速度快
    3.hdfs文件数据都是存储在多台datanode的,这些datanode原始数据由namenode统一管理,并且可以无限扩展,体现了分布式文件系统可以存储任意大小文件

    展开全文
  • HDFS读写原理

    千次阅读 2019-02-27 14:14:03
    HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。 HDFS有很多特点: 保存多个副本,且提供容错机制...

    1. 简介

    HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。

    HDFS有很多特点:

    1. 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
    2. 运行在廉价的机器上。
    3. 适合大数据的处理。多大?多小?HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。
      在这里插入图片描述

    如上图所示,HDFS也是按照Master和Slave的结构。分NameNodeSecondaryNameNodeDataNode这几个角色。

    • NameNode: 是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

    • SecondaryNameNode: 是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

    • DataNode: Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

    • 热备份: b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

    • 冷备份: b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

    • fsimage: 元数据镜像文件(文件系统的目录树。)

    • edits: 元数据的操作日志(针对文件系统做的修改操作记录)

    NameNode内存中存储的是=fsimage+edits。
    SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。

    2. 工作原理

    2.1 写操作

    在这里插入图片描述
    前提:
    有一个文件FileA,100M大小。Client将FileA写入到HDFS上。
    HDFS按默认配置。
    HDFS分布在三个机架上Rack1,Rack2,Rack3。

    文件写入过程:

    1. Client将FileA按64M分块。分成两块,block1和Block2;

    2. Client向nameNode发送写数据请求,如图蓝色虚线①------>。

    3. NameNode节点,记录block信息。并返回可用的DataNode,如粉色虚线②--------->。

      Block1: host2,host1,host3	
      
      Block2: host7,host8,host4
      

      原理:
      NameNode具有RackAware机架感知功能,这个可以配置。
      (1)若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。
      (2)若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。

    4. client向DataNode发送block1;发送过程是以流式写入。

      流式写入过程:
      1) 将64M的block1按64k的package划分;
      2) 然后将第一个package发送给host2;
      3) host2接收完后,将第一个package发送给host1,同时client想host2发送第二个package;
      4) host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package。
      5) 以此类推,如图红线实线所示,直到将block1发送完毕。
      6) host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。如图粉红颜色实线所示。
      7) client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就真完成了。如图黄色粗实线
      8) 发送完block1后,再向host7,host8,host4发送block2,如图蓝色实线所示。
      9) 发送完block2后,host7,host8,host4向NameNode,host7向Client发送通知,如图浅绿色实线所示。
      10) client向NameNode发送消息,说我写完了,如图黄色粗实线。。。这样就完毕了。

    分析
    通过写过程,我们可以了解到:

    1. 写1T文件,我们需要3T的存储,3T的网络流量贷款。
    2. 在执行读或写的过程中,NameNode和DataNode通过HeartBeat进行保存通信,确定DataNode活着。如果发现DataNode死掉了,就将死掉的DataNode上的数据,放到其他节点去。读取时,要读其他节点去。
    3. 挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系;其他机架上,也有备份。

    2.2 读操作

    在这里插入图片描述

    读操作就简单一些了,如图所示,client要从datanode上,读取FileA。而FileA由block1和block2组成。

    那么,读操作流程为:

    1. client向namenode发送读请求。

    2. namenode查看Metadata信息,返回fileA的block的位置。

      block1:host2,host1,host3
      
      block2:host7,host8,host4
      
    3. block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取;

    上面例子中,client位于机架外,那么如果client位于机架内某个DataNode上,例如,client是host6。那么读取的时候,遵循的规律是:

    优选读取本机架上的数据。
    

    3. HDFS中常用到的命令

    3.1 hadoop fs

    hadoop fs -ls /
    hadoop fs -lsr
    hadoop fs -mkdir /user/hadoop
    hadoop fs -put a.txt /user/hadoop/
    hadoop fs -get /user/hadoop/a.txt /
    hadoop fs -cp src dst
    hadoop fs -mv src dst
    hadoop fs -cat /user/hadoop/a.txt
    hadoop fs -rm /user/hadoop/a.txt
    hadoop fs -rmr /user/hadoop/a.txt
    hadoop fs -text /user/hadoop/a.txt
    hadoop fs -copyFromLocal localsrc dst 与hadoop fs -put功能类似。
    hadoop fs -moveFromLocal localsrc dst 将本地文件上传到hdfs,同时删除本地文件。
    

    3.2 hadoop fsadmin

    hadoop dfsadmin -report
    hadoop dfsadmin -safemode enter | leave | get | wait
    hadoop dfsadmin -setBalancerBandwidth 1000
    

    3.3 hadoop fsck

    3.4 start-balancer.sh


    转自:https://www.cnblogs.com/laov/p/3434917.html
    展开全文
  • Hadoop之HDFS文件读写流程(超详细!!!!)

    千次阅读 2019-11-04 15:50:46
    HDFS文件写入过程: 详细步骤解析: 1、 client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传; 2、 client请求第一个block该传输到哪些...

    HDFS文件写入过程:

    以客户端为中心输出数据到datanode

    详细步骤解析:

    1、 client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
    2、 client请求第一个block该传输到哪些DataNode服务器上;
    3、 NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址如:A,B,C;

    4、 client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,后逐级返回client;
    5、 client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。
    6、 数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给client;
    7、关闭写入流。
    8、 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。

    HDFS文件读取过程:

    以客户端为中心读取数据

    详细步骤解析

    1、客户端通过调用FileSystem对象的open()来读取希望打开的文件。
    2、 Client向NameNode发起RPC请求,来确定请求文件block所在的位置;
    3、 NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;
    4、 Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性);
    5、 底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
    6、并行读取,若失败重新读取
    7、 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表;
    8、返回后续block列表
    9、 最终关闭读流,并将读取来所有的 block 会合并成一个完整的最终文件。
    说明:
    1、读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的DataNode 继续读。
    2、read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;

    展开全文
  • 深入分析HDFS原理读写流程

    千次阅读 多人点赞 2020-03-12 17:29:46
    1.2、组成HDFS的各模块作用1.2.1、Client1.2.2、NameNode1.2.3、DataNode1.2.4、SecondaryNameNode二、数据读写2.1、读数据2.2、写数据三、优缺点 一、架构体系 1.1、什么是HDFSHDFS即Hadoop Distributed File ...
  • HDFS文件读写流程

    万次阅读 2019-11-04 21:46:38
    目标:掌握HDFS写入数据的详细过程 文件写入过程 详细步骤解析: 1、 client发起文件上传请求,通过RPC与NameNode建立...3、 NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataN...
  • 一、HDFS读过程 ... 1.1 HDFS API 读文件 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path file = new Path("demo.txt"); FSDataInputStream inStream = fs.ope...
  • Hadoop HDFS读写数据过程原理分析
  • HDFS文件读写流程(2)

    2019-11-04 23:20:23
    因为在之前的几篇博客中,小菌已经为大家带来了HDFS的基本概念及一些常用操作,这篇博客小菌将接着HDFS文件系统介绍的内容,为大家带来HDFS的读写流程! 文件写入过程(重点) 详细步骤解析: 1、 client发起文件上传...
  • HDFS的读原理 Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://us1:9000"); //DistributedFileSystem类的对象 FileSystem fs = org.apache.hadoop.fs.FileSystem.get(conf); ...
  • 1. 会在Linux环境下编写读写HDFS文件的代码; 2. 会使用jar命令打包代码; 3. 会在master服务器上运行HDFS读写程序; 4. 会在Windows上安装Eclipse Hadoop插件; 5. 会在Eclipse环境编写读写HDFS文件的代码...
  • hdfs-文件读写测试

    2017-10-23 14:12:55
    本文通过对一些常见场景的测试,重在探索hdfs分布式文件系统的文件读写原理
  • HDFS读写数据的原理

    千次阅读 2017-12-26 22:04:08
    下面说下HDFS读写数据的原理。1 概述 HDFS集群分为两大角色:NameNode、DataNode NameNode负责管理整个文件系统的元数据 DataNode 负责管理用户的文件数据块 文件会按照固定的大小(blocksize)切成若干块后...
  • 阅读目录一、HDFS文件读取过程HDFS文件读取的流程图:流程图的说明:代码:二、HDFS文件写入过程HDFS文件写入的流程图流程图的说明:代码: 一、HDFS文件读取过程 当客户端需要读取文件时,首先向NameNode发起读...
  • HDFS文件系统中读写文件原理

    千次阅读 2018-09-14 10:35:39
    1、从HDFS文件系统中写文件  1、客户端发起请求要写文件 /aa/jdk.tgz  2、namenode会检查该目录是否存在,返回是否可写  3、客户端请求写入第一个block  4、namenode返回3个datanode主机  5、挑选dn1,...
  • HDFS文件读写流程及数据完整性计算

    千次阅读 2019-11-05 18:02:06
    HDFS数据写入流程 ① client发起文件上传请求,通过RPC与NameNode建立通讯,...③ NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址如: A,B,C; ④ client请求3台...
  • HDFS 读写文件讲解

    2020-06-30 19:27:14
    我们知道在虚拟机中通过命令可以实现Linux本地文件log1.txt上传到HDFS中,以及从HDFS中下载文件。 #上传文件(向HDFS中写文件hdfs dfs -put /opt/log.txt /hdfs/log/log1.txt 或 hdfs dfs -copyFromLocal /opt/...
  • 在Ubuntu系统的/学号(每个人之间的学号)/salesInfo目录下,有买家的购买记录文件Sales,该文件记录了买家的id,购买商品的id以及购买日期,文件为名为Sales。Sales包含:买家ID、商品ID、购买日期三个字段,数据以...
  • HDFS基本操作命令和读写原理一、基本操作命令1、创建目录 mkdir2、查看文件,ls 没有cd命令, 需要指绝对路径3、上传文件 put4、下载文件 get5、复制 cp6、查看文件内容 cat , 如果数据量比较大,不能使用7、移动 mv...
  • HDFS数据副本机制 ​1、第一份数据来源于用户的客户端 ​2、第二份数据存放在与第一份副本在同一个机架,不同的节点,按照一定的机制(cpu 内存 io 使用率和...​2、确定指定的文件块到具体的DataNode结点的映射关系。
  • HDFS(Hadoop Distributed File System)作为GFS思想的开源实现,支持数据流读取和处理超大规模文件,并能够运行在由廉价服务器组成的集群上;...在此以hadoop2.x为例结合图解论述HDFS文件读写机制。...
  • 浅谈HDFS读写数据过程内部原理

    千次阅读 2018-05-28 10:00:39
    深入理解HDFS读写数据过程内部原理
  • HDFS概述,读写原理及shell命令一.HDSF概述1.产生背景2.HDFS的优缺点(1)HDSF的优点(2)HDFS的缺点3.HDFS设计目标(1)硬件故障(2)大规模数据集(3)移动计算比移动数据更经济二.HDFS架构1.Client:客户端2....
  • 准确的说,hadoop是一套大数据的解决方案或者技术栈,不仅仅特指某种大数据技术,由Apache基金会上多个与大数据有关的明星组件构成,包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式...
  • HDFS存储和读写原理

    2018-03-31 15:36:05
    1.1 HDFS写流程1. 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录(账本上记录一条),否则会让...
  • 新建maven工程 - quickstart ...1. pom文件引入依赖 <!-- hdfs 依赖 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifact...
  • Hdfs文件读写过程

    2019-11-14 08:24:05
    HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。它们是横跨在多台计算机上的存储系统 优点: 1 很好的处理超大文件 GB ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,879
精华内容 6,351
关键字:

hdfs文件读写原理