前面,分析了org.apache.hadoop.fs.Filesystem抽象类,我们已经了解到,要实现一个最基本的文件系统都需要包含哪些要点。下面具体到某个实现Filesystem的具体实现类,基于该抽象类Filesystem派生的类的继承关系:
? extends FileSystem
下面分析FileSystem类的两个直接子类FilterFileSystem与RawLocalFileSystem的实现:
- FilterFileSystem类
这里,首先分析FileSystem抽象类的子类org.apache.hadoop.fs.FilterFileSystem类,它是一个文件系统的实现类,该文件系统包含了一些其他的Filesystem文件系统,并以这些Filesystem文件系统作为基本的文件系统,可能用来转换数据或者提供附加功能。
该类主要是在其内部定义了一个Filesystem属性:
其实现了基类Filesystem的全部方法,是通过fs直接调用Filesystem抽象类中的方法达到的,似乎并没有增加任何其它的功能,但是可以作为一个具有最基本功能的文件系统。
- RawLocalFileSystem类
RawLocalFileSystem类是实现了FileSystem的API的一个原生本地文件系统,它的属性如下所示:
workingDir在该类的构造方法中,通过获取系统的属性“user.dir”属性初始化的:
该类中包含了3个与文件读写相关的内部类,分别为:
TrackingFileInputStream类通过继承自基类FileSystem类的Statistics statistics属性,来跟踪文件系统中数据流动。
LocalFSFileInputStream类包装了一个FileInputStream流属性,通过构造方法构造一个TrackingFileInputStream来完成输入流的相关操作。
LocalFSFileOutputStream类包装了一个FileOutputStream流属性,以来FileOutputStream定义的操作来实现对文件系统中的输出流的操作。该类还实现了org.apache.hadoop.fs.Syncable接口,使得该文件输出流类能够实现并调用该接口定义的sync()方法,实现强制对基本设备的缓冲区执行同步操作。