星期四, 九月 14, 2006

Hadoop系列-fs包之代码实现

在此包中,最重要的是FileSystem抽象类。它定义了文件系统中涉及的一些基本操作,如:create,rename,delete...另外包括 一些分布式文件系统具有的操作:copyFromLocalFile,copyToLocalFile,...类似于Ftp中put和get操作。 LocalFileSystem和DistributedFileSystem,继承于此类,分别实现了本地文件系统和分布式文件系统。
了解了最重要的类之后,看一看它的一系列stream类:
  • FSOutputStream在原有OutputStream基础之上添加了获得文件指针偏移量的getPos方法。可以通过FileSystem的 createRaw获得它的实例。这里存在一个疑问,这个扩展的getPos方法在fs包中没有被使用。如果在其余包中同样没有被使用,那么扩展就显得多 余。
  • FSInputStream在原有InputStream基础之上同样添加了getPos方法,同时可以通过seek方法定位指定的偏移量处。可以通过 FileSystem的openRaw获得它的实例。新添加的getPos和seek方法在FSDataInputStream类中被使用。
  • FSDataOutputStream继承于DataOutputStream,包装了FSOutputStream。与DataOutputStream相比,不同之处在于:
  1. 添加了getPos方法,它是利用PositonCache记录当前的position
  2. 通过Buffer内类对输出进行缓存处理,改进性能
  3. 可以构建具有checksum的流,保证数据的正确性
  • FSDataInputStram继承于DataInputStream,包装了FSInputStream。与DataInputStream相比,不同之处在于:
  1. 添加了seek和getPos方法
  2. 通过Buffer内类对输入进行缓存处理,改进性能
  3. 可以构建具有checksum的流,保证数据的正确性
另外,为了屏蔽Windows和Unix、Linux在路径处理上存在的差异,实现了Path类,提供了统一的处理方式。

没有评论: