Hadoop-源码分析--FileSystem的创建过程

 HDFS,即Hadoop Distributed File System,为Hadoop的分布式文件系统。其实除了HDFS外,hadoop还支持其它类型的文件系统,比如FTP、本地文件系统等,而这些文件系统都扩展自抽象基础类FileSystem,该抽象类类提供了丰富的方法用于对文件系统进行操作,比如创建目录、删除文件、重命名等。无论使用的是HDFS还是本地文件系统,或者其它所支持的文件系统,推荐在应用程序使用FileSystem对象引用实际的文件系统,比如FileSystem local= FileSystem.getLocal(new Configuration()),该语句返回LocalFileSystem。FileSystem的类层次关系如下图所示,其中将重点学习红色标记的DistributedFileSystem,该类实现了DFS系统,通过该类用户代码与HDFS交互。

 


      既然Hadoop有这么多支持的文件系统,那么Hadoop是如何使用FileSystem对象引用实际的DistributedFileSystem文件系统的呢,我们将通过源码逐步分析这个创建过程。

为此,我们写一个创建FileSystem的小程序,如下图,并从该程序中的get()方法入手。




       进入该get(Configuration conf)方法,发现并没有做什么实际的事情,它继续调用get(URI uri, Configuration conf)方法。



扫描二维码关注公众号,回复: 1082514 查看本文章

        进入get(URI uri, Configuration conf)方法,从下面的代码可以得知,get方法不是每次都创建FileSystem对象,会从缓存中获取FileSystem对象。



       进入CACHE.get(URI uri, Configuration conf)方法,发现CACHE为FileSystem的一个内部类。在该get()方法中,uri和conf被放在了一个key中,key中存储着用户身份信息和访问的系统信息。



       进入getInternal(URI uri, Configuration conf, Key key)方法。



        进入createFileSystem(URI uri, Configuration conf)方法,负责创建具体的文件系统实例。



       进入initialize(URI uri, Configuration conf)方法,注意,由于此处是对DistributedFileSystem进行初始化,所以一定要查看DistributedFileSystem类的initialize(URI uri, Configuration conf)方法!!!



        这样,初始化工作也完成,可以返回DistributedFileSystem文件系统对象啦。

        这就是文件系统创建的一个大体过程。

        通过该文件系统读取文件信息,见下篇日志  http://blog.csdn.net/u010010428/article/details/51386261

猜你喜欢

转载自blog.csdn.net/mingming156/article/details/79003484