Hadoop HDFS源码学习笔记(三)
来源:互联网 发布:java 动态执行方法 编辑:程序博客网 时间:2024/06/05 07:14
继续上一篇blog,进一步分析FileSystem的API,并完善类图
3、write 数据
FileSystem类有一系列的create方法,其中简单的方法就是给定一个Path对象,然后返回一个用于写入数据的输出流:
public FSDataOutputStream create(Path f) throws IOException
create方法的多个重载版本中主要是允许我们指定是否需要覆盖已有的文件、文件备份数、写入文件是buffer的大小、block的大小以及文件的权限,并且可以指定是否上报progress
create方法,在创建文件时,如果路径中的parent directory不存在,则会自动创建不存在的父目录,如果不想创建父目录则FileSystem还提供了另外的方法:
public FSDataOutputStream createNonRecursive(Path f, FsPermission permission,
boolean overwrite,
int bufferSize, short replication, long blockSize,
Progressable progress) throws IOException {}
另外FileSystem提供了创建长度为0的file的方法:
public boolean createNewFile(Path f) throws IOException
如果给定的Path对象指定的file已经存在或者创建失败则会返回false
DFSOutputStream类通过byte流来创建一个文件,client端需要写入的数据会被定期的去做cache,数据首先被split成packet,每个packet的大小为64K,packet由chunk组成,每个chunk的大小为512Bytes并且跟着相应的checksum,当client去填充currentPacket的时候,该packet就会被放到dataQueue中,DataStreamer线程从DatatQueue中取出数据,并发送到pipeline的第一个datanode中并将该packet从dataQueue转移到ackQueue中,当接受到所有datanode的ack信息之后,将该packet从ackQueue中移除
另外一种创建文件的方法,是使用append方法,在一个已有的文件末尾追加数据,同样和create方法类似在FileSystem类有很多append方法的重载版本
对于一个已经打开的文件HDFS仅允许顺序写入,也就是说只能对文件进行append操作,既然不支持从文件任意位置的写入,因此FSDataOutputStream就没有必要实现Seekable和PositionedReadable接口了,因为位置定位没有任何意义
4、mkdir 创建目录
public boolean mkdirs(Path f) throws IOException 这个方法可以一次性的创建不存在的目录,其实在create方法中如果不存在父目录就会直接创建,所以可以不必显示的创建一个目录
5、FileStatus 文件元数据
FileStatus类在client提供了file的元数据信息,主要包括文件长度、块大小、备份数、修改时间、所有者以及权限信息
除此之外还有列出文件或目录信息的方法listStatus 删除数据delete方法等
- Hadoop HDFS源码学习笔记(三)
- Hadoop HDFS源码学习笔记(一)
- Hadoop HDFS源码学习笔记(二)
- Hadoop HDFS源码学习笔记(四)
- Hadoop HDFS源码学习笔记(五)
- hadoop学习笔记<三>----HDFS
- Hadoop HDFS源码学习笔记(六)--fetchBlockByteRange
- Hadoop HDFS源码学习笔记(七)--DFSInputStream -- openInfo
- Hadoop HDFS源码学习笔记(八)---HdfsProxy
- Hadoop学习笔记(三)——HDFS应用程序开发
- Hadoop学习笔记(三)漫画解读HDFS读写原理
- hadoop学习笔记(HDFS)
- hadoop 学习笔记 三 ---HDFS hadoop分布式文件系统
- 【Hadoop源码学习】之hdfs(一)
- hadoop-hdfs学习笔记
- 【Hadoop】HDFS笔记(三):HDFS的Shell操作
- Hadoop分布式文件系统(HDFS)学习笔记
- Hadoop学习笔记(四)---HDFS概述
- ibatis sqlMap.xml 文件 like 查询的三种方案
- WCE+ARM+TCPMP VS2005之旅:ASM编译添加规则的方法
- 开这个小博客,学习编程的一个记录吧
- makefile 中 $@ $^ %< 使用
- 抓取sybase中进程正在执行的sql脚本
- Hadoop HDFS源码学习笔记(三)
- MinGW简介
- 网秦你先修复下自己的bug先啊!!
- Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框 【不定期更新】
- Servelet上传一个汉字的名字出错的问题
- C++虚函数表剖析
- 2012
- rt-thread针对rx62N的移植
- VS2005中编译openCV2.1.0