hadoop学习笔记(六):HDFS文件的读写流程

一、HDFS读取文件流程:

详解读取流程:

Client调用FileSystem.open()方法:

  1 FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有block拷贝的DN地址)。

  2 选取举栗客户端最近的DN建立连接,读取block,返回FSDataInputStream

Client调用输入流的read()方法:

  1 当读到block结尾时,FSDataInputStream关闭与当前DN的连接,并未读取下一个block寻找最近DN

  2 读取完一个block都会进行checksum验证,如果读取DN时出现错误,客户端会通知NN,然后再从下一个拥有该block拷贝的DN继续读。

  3 如果block列表读完后,文件还未结束,FileSystem会继续从NN获取下一批block列表。

关闭FSDataInputStream

二、HDFS文件写入流程:

详细写入流程:

Client调用FileSystem的create()方法:

  1 FileSystem向NN发出请求,在NN的namespace里面创建一个新的文件,但是并不关联任何块

  2 NN检查文件是否已经存在、操作权限。如果检查通过,NN记录新文件信息,并在某一个DN上创建数据块。

  3 返回FSDataOutputStream,将Client引导至该数据块执行写入操作。

Client调用输出流的write()方法:

  HDFS默认将每个数据块放置3份。FSDataOutputStream将数据首先写到第一节点,第一节点将数据包传送并写入第二节点,第二节点 --> 第三节点。

Client调用流的close()方法:

  flush缓冲区的数据包,block完成复制份数后,NN返回成功消息。

原文地址:https://www.cnblogs.com/laowangc/p/8949850.html

时间: 2024-07-29 04:38:24

hadoop学习笔记(六):HDFS文件的读写流程的相关文章

Hadoop学习笔记0002——HDFS文件操作

  说明:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式. 方式一:命令行方式 Hadoop文件操作命令形式为:hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命令,包括添加文件和目录.获取文件.删除文件等. 1 添加文件和目录 HDFS有一个默认工作目录/usr/$USER,其中$USER是你的登录用户名,作者的用户名是root.该目录不能自动创建,需要执行m

Hadoop学习笔记之二 文件操作

HDFS分布式文件系统:优点:支持超大文件存储.流式访问.一次写入多次读取.缺点:不适应大量小文件.不适应低时延的数据访问.不适应多用户访问任意修改文件. 1.hadoop用于大数据处理,在数据量较小时,并不适用于实时性强的任务,并不是所有的job放到hadoop上,性能都会提升. 2.大量小文件的情况下会极大的降低系统的性能,所以处理前需要先将少文件聚合成大文件,map的输出也应该首先combine在传输给reduce. 3.数据传输时的IO开销,存储在内存中还是硬盘中,节点之间共享数据的分发

hadoop学习笔记之--- HDFS原理学习

HDFS HDFS设计基础与目标: 冗余:硬件错误是常态 流式数据访问.即数据比量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理. 大规模数据集 简单一致性模型.为了降低系统复杂程度,对文件采用一次性写多多次读的逻辑设置,即是文件一经写入,关闭,再也不能修改. 程序采用"数据京近"原则分配节点执行. OLTP:偶尔随机性德读写 HDFS体系架构: NameNode: 管理文件系统的命名空间: 记录每个文件数据块在各个Datanode上的位置和副本信息: 协调客户端对文件

Hadoop学习笔记(三) ——HDFS

参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @[email protected] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable @[email protected] WARN hdfs.DFSClient: DFSInpu

Python学习笔记六:文件处理

一:打开文件 open(name,mode,[bufferSize]) name:文件路径 mode:文件打开方式 二:文件读取 read()方法:可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示. readline([size]):如果不传参,一次默认读取一行.如果size<一行长度,则读取size个字节.如果size>一行长度,则只读取一行. readlines():一次读取io.DEFAULT_BUFFER_SIZE行,约586行,以字符串数组的形式返回读取结

Hadoop学习笔记_7_分布式文件系统HDFS --DataNode体系结构

分布式文件系统HDFS --DataNode体系结构 1.概述 DataNode作用:提供真实文件数据的存储服务. 文件块(block):最基本的存储单位[沿用的Linux操作系统地概念].对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block. 与Linux操作系统不同的是,一旦上传了一个小于Block大小的文件,则该文件会占用实际文件大小的空间. 2.进入hdfs-default.xml <prope

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

Hadoop学习笔记_5_分布式文件系统HDFS --shell操作

分布式文件系统HDFS --shell操作 分布式文件系统[Distributed File System]概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 分布式文件系统特点: 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般

Hadoop学习笔记_6_分布式文件系统HDFS --NameNode体系结构

分布式文件系统HDFS --NameNode体系结构 NameNode 是整个文件系统的管理节点. 它维护着整个文件系统的文件目录树[为了使得检索速度更快,该目录树放在内存中], 文件/目录的元信息和每个文件对应的数据块列表. 接收用户的操作请求. Hadoop确保了NameNode的健壮性,不容易死亡.文件目录树以及文件/目录的元信息等归根到底是存放在硬盘中的,但是在Hadoop运行时,需要将其加载到内存中. 文件包括: fsimage:元数据镜像文件.存储某一时段NameNode内存元数据信