Hadoop源码分析之FileSystem

本文介绍了Hadoop抽象文件系统的设计,它通过FileSystem接口提供统一访问不同文件系统的能力。重点讲解了如何通过Configuration获取FileSystem对象,并详细阐述了FileSystem对象的创建过程,特别是DistributedFileSystem的初始化步骤。
摘要由CSDN通过智能技术生成

新建了一个Configuration对象之后,在调用Configuration.get()获取配置键值对时,如果Configuration对象的properities为null,就会默认加载CLASSPATH上的默认配置文件(参见 Hadoop源码分析之Configuration),所以在得到一个Configuration对象之后就可以利用这个对象来新建一个FileSystem对象。

Hadoop抽象文件系统

为了为不同的文件系统提供一个统一的接口,Hadoop提供了一个抽象的文件系统,而Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)只是这个抽象文件系统的一个具体实现。Hadoop抽象文件系统接口主要由抽象类org.apache.hadoop.fs.FileSystem提供,其继承的层次结构如下图:


从上图可以看出,Hadoop发行包中包含了不同的FileSystem子类,以满足不同得到数据访问需求。比较典型的是访问HDFS上的数据,但有些时候也可访问存储在其他文件系统上,如Amazon的S3系统。此外,用户还可以根据特定的需求,自己实现特定网络存粗服务的具体文件系统。

Hadoop抽象文件系统为用户提供了一个访问不同的文件系统的统一接口,大部分接口都在FileSystem这个抽象类中。其主要提供的方法可以分为两部分:一部分用于处理文件和目录相关的事务;另一部分用于读写文件数据。其中处理文件和目录主要是指创建文件,创建目录,删除文件,删除目录等操作,读写数据文件主要是指读文件数据,写入文件数据等操作。这一些列操作大部分与Java的文件系统接口相似,如FileSystem.mkdirs(Path f, FsPermission permission)方法在FileSystem对象所代表的文件系统中创建目录,Java.io.File.mkdirs()也是创建目录的方法。FileSystem.delete(Path f)方法用于删除文件或目录,Java.io.File.delete()方法也用于删除文件或目录。FileSystem中需要子类实现的抽象方法大部分都是见名知意的方法,下面整理了FileSystem中的抽象方法:

	/**获取文件系统URI**/
	public abstract URI getUri();
	/**打开一个文件,并返回一个输入流**/
	public abstract FSDataInputStream open(Path f, int bufferSize)
		    throws IOException;
	/**创建一个文件,并返回一个输入流**/
	public abstract FSDataOutputStream create(Path f,
		      FsPermission permission,
		      boolean overwrite,
		      int bufferSize,
		      short replication,
		      long blockSize,
		      Progressable progress) throws IOException;
	/**在一个已经存在的文件中追加数据**/	  
	public abstract FSDataOutputStream append(Path f, int bufferSize,
		      Progressable progress) throws IOException;
	/**修改文件名或目录名**/
	public abstract boolean rename(Path src, Path dst) throws IOException;
	/**删除文件**/
	public abstract boolean delete(Path f, boolean recursive) throws IOException;
	/**如果Path是一个目录,读取一个目录下的所有项目和项目属性,如果Path是一个文件获取该文件的属性**/
	public abstract FileStatus[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值