hdsf读写文件

wakerwang wakerwang     2022-12-25     211

关键词:

HDFS 读取文件

HDFS的文件读取原理,主要包括以下几个步骤:

1、首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的   实例。

2、DistributedFileSystem通过RPC(远程过程调用)获得文件的第一批block的

locations,同一block按照重复数会返回多个locations,这些locations按照hadoop拓  扑结构排序,距离客户端近的排在前面。

3、前两步会返回一个FSDataInputStream对象,该对象会被封装成 DFSInputStream 对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用

read方 法,DFSInputStream就会找出离客户端最近的datanode并连接datanode。

4、数据从datanode源源不断的流向客户端。

5、如果第一个block块的数据读完了,就会关闭指向第一个block块的datanode连接,   接着读取下一个block块。这些操作对客户端来说是透明的,从客户端的角度来看只是    读一个持续不断的流。

6、如果第一批block都读完了,DFSInputStream就会去namenode拿下一批blocks的location,然后继续读,如果所有的block块都读完,这时就会关闭掉所有的流。

 

HDFS 写入文件

HDFS的文件写入原理,主要包括以下几个步骤:

1.客户端通过调用 DistributedFileSystem 的create方法,创建一个新的文件。

2.DistributedFileSystem  通过  RPC(远程过程调用)调用   NameNode,去创建一个没有blocks关联的新文件。创建前,NameNode  会做各种校验,比如文件是否存在, 客户端有无权限去创建等。如果校验通过,NameNode 就会记录下新文件,否则就会抛出IO异常。

3.前两步结束后会返回 FSDataOutputStream 的对象,和读文件的时候相似,FSDataOutputStream 被封装成 DFSOutputStream,DFSOutputStream 可以协调NameNode和 DataNode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet,然后排成队列data queue。

4.DataStreamer 会去处理接受 data queue,它先问询 NameNode 这个新的 block 最适合存储的在哪几个DataNode里,比如重复数是3,那么就找到3个最适合的

DataNode,把它们排成一个 pipeline。DataStreamer 把 packet 按队列输出到管道的第一个 DataNode 中,第一个 DataNode又把 packet 输出到第二个 DataNode 中,以此类推。

5.DFSOutputStream 还有一个队列叫 ack queue,也是由 packet 组成,等待DataNode的收到响应,当pipeline中的所有DataNode都表示已经收到的时候,这时akc queue才会把对应的packet包移除掉。

6.客户端完成写数据后,调用close方法关闭写入流。

7.DataStreamer 把剩余的包都刷到 pipeline 里,然后等待 ack 信息,收到最后一个ack 后,通知 DataNode 把文件标示为已完成。

文件读写

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件... 查看详情

读写文件

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件... 查看详情

c语言文件的读写(代码片段)

引入OS操作系统打开文件fopen()函数读写模式:r:读取已有文件w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件a:文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件r+:读写已有文件w+:文件不存... 查看详情

文件读写函数

字符读写函数:   fgetc/fputc字符串读写函数:fputs/fgets格式化读写函数:fscanf/fprintf二进制读写函数:fread/fwrite其他相关函数:检测文件结尾函数feof检测文件读写出错函数ferror清除末尾标志和出错标志函数clearerr文件定... 查看详情

io编程-----读写文件

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件... 查看详情

c语言文件操作相关函数(代码片段)

...数文件打开(fopen)参数mode可选值案例文件关闭(fclose)文件读写相关函数总览字符读写函数字符读写案例行读写函数行读写案例块读写函数块读写案例格式化读写函数格式化读写案例随机读写函数随机读写案例文件操作综合案例头... 查看详情

c语言文件操作相关函数(代码片段)

...数文件打开(fopen)参数mode可选值案例文件关闭(fclose)文件读写相关函数总览字符读写函数字符读写案例行读写函数行读写案例块读写函数块读写案例格式化读写函数格式化读写案例随机读写函数随机读写案例文件操作综合案例头... 查看详情

标准i/o读写文件

...只读文件,该文件必须存在。        r+打开可读写的文件,该文件必须存在。        rb+读写打开一个二进制文件,只允许读写数据。        rt+读写打开一个文本文件,允许读和写。      ... 查看详情

配置文件读写

配置文件的读写  System.ConfigurationManager类用于对配置文件的读取。其具有的成员如下:一、AppSettings   AppSetting是最简单的配置节,读写非常简单。名称说明AppSettings获取当前应用程序默认配置的AppSettingsSection数据Connection... 查看详情

文件操作读写文本文件

【读写txt文件】r:只读w:只写模式【不可读;不存在则创建;存在则清空内容】w+:w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。#coding=utf-8#读文件defread_file():#读取文件read_txt=open(‘txt/read_txt‘,‘r‘)#一... 查看详情

如何读写 XML 文件?

】如何读写XML文件?【英文标题】:HowtoreadandwriteXMLfiles?【发布时间】:2011-11-1411:20:00【问题描述】:我必须读写XML文件。使用Java读写XML文件最简单的方法是什么?【问题讨论】:通过StAX进行内存高效的部分xml解析:***.com/questi... 查看详情

如何读写 XML 文件?

】如何读写XML文件?【英文标题】:HowtoreadandwriteXMLfiles?【发布时间】:2017-01-1215:02:27【问题描述】:我必须读写XML文件。使用Java读写XML文件最简单的方法是什么?【问题讨论】:通过StAX进行内存高效的部分xml解析:***.com/questi... 查看详情

文件流读写

1.命名空间  System.IO2.五句创建及完成读写操作句子  FileStreammyfs=newFileStream(path,FileMode.Open);//创建读写流,path为路径  StreamWritermysw=newStreamWriter(myfs);//创建读写器  //StreamRead 查看详情

#littlefs原理分析#[五]文件读写(代码片段)

...ittlefs中的目录操作,这一篇文章则将介绍littlefs中的文件读写操作。本文会根据文件的存储类型进行介绍,即inline文件和outline文件,其读写过程也有差别。另外还会介绍inline文件到outline文件的转换,以及littlefs底层的读写API。1.... 查看详情

c文件读写

0.文件操作相关函数 1. 文件分为字符方式读写,字节方式(二进制方式)读写  fprintf/fscanf FILE*file;//全局定义voidsave(Bookbooks[]){inti;if((file=fopen(PATH,FW))==NULL){printf("文件保存失败,请检查文件是否存在!");return;}for(i=0;i<cnt;i++){... 查看详情

文件读写

  查看详情

文件读写(笔记)

...;不存在则创建;存在则只追加内容;】"+"表示可以同时读写某个文件r+,可读写文件。【可读;可写;可追加】w+,写读a+,同awith语句:为了避免打开文件后忘记关闭,可以通过管理上下文,即:withopen(filenam 查看详情

获取filesystem

/***根据配置文件获取HDFS操作对象*有两种方法:*1.使用conf直接从本地获取配置文件创建HDFS对象*2.多用于本地没有hadoop系统,但是可以远程访问。使用给定的URI和用户名,访问远程的配置文件,然后创建HDFS对象。*@returnFileSystem*/... 查看详情