Hadoop权威指南-ch3(2) Hadoop文件系统

注:本文涉及书中3.4~小结

Hadoop的文件系统

Hadoop有很多文件系统,HDFS只是其中的一个。Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoop的文件系统接口,该抽象类有几个具体的实现,详见本书3.4小节表3-1.

文件系统接口

以下介绍的接口通常用于访问HDFS

1. HTTP

有两种方式:直接访问和通过HDFS代理访问


2. C语言

3. FUSE(FileSystem in Userspace,用户空间文件系统)

Java接口

与Hadoop的某一文件系统进行交互通过FileSystem类实现。

注:书中给出了几个Hadoop文件系统的实例,希望能够在本机进行复现。

1. 读取文件

方法(1)通过FsURLStreamHandlerFactory实例调用java.net.URL对象的setURLStreamHandlerFactory方法

方法(2)通过FileSystem API来打开一个文件的输入流

2. 写入数据

create(),Progressable(),append(),FileCopyWithProgress()


补充:FileSystem类,FSDataInputStream和FSDataOutputStream

FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。

FSDataInputStream:HDFS的输入流,与读文件有关,由open()方法获得。

FSDataOutputStream:HDFS中的输出流,与写文件有关,由create()方法获得。

注:HDFS不支持在除文件末尾之外的其他位置进行写入。

HDFS数据读写过程:



3. 创建目录

显示创建目录mkdirs(),通常在调用create()写入文件时会自动创建父目录,而无需显示创建。

4. 查询

文件元数据FileStatus:FileStatus类封装了文件系统中文件和目录的元数据,包括文件长度、块大小、复本、修改时间、所有者以及权限信息。

(1)获取文件或目录

FileStatus的getFileStatus()方法用于获取文件或目录的FileStatus对象。

(2)列出文件

listStatus()方法:返回一个文件或目录的相关信息

(3)通配(globbing)

globaStatus()返回与其路径匹配于指定模式的所有文件的FileStatus对象数组,并按路径排序。

PathFile()用于排除匹配正则表达式的路径。

(4)删除数据

delete()永久删除文件或目录。

你可能感兴趣的:(Hadoop权威指南-ch3(2) Hadoop文件系统)