您的位置:首页 > 运维架构

hadoop的文件系统

2016-01-11 09:13 225 查看
hadoop抽象了文件系统,它可以整合很多的文件系统。

FileSystem就是hadoop文件系统的抽象类。里面包含了对文件系统进行可操作的接口,比如创建目录,创建文件,读取文件,删除文件。。。

下面来看看它可以与哪些文件系统进行整合,直接查看FileSystem的子类,如下图



其中有些文件系统我也没听说过,更谈不上了解了

。只挑几个说下

1、DistributedFileSystem 这个就是我们经常说的hdfs,hadoop分布式文件系统

2、RawLocalFileSystem 没有校验和的本地文件系统 。关于校验和 我现在的理解就是 它是一种验证文件是否完整的一种机制,如果由于硬盘损坏导致文件部分数据丢失,那通过校验和 的比较久可以判断出来

3、LocalFileSystem  带校验和的本地文件系统

4、WebHdfsFileSystem 这个我现在是这样理解的:它其实就是在DistributedFileSystem 上套了一个壳子,使可以通过http/https来访问hdfs文件系统。启动nodeManager时,会启动一个内嵌的服务器,默认启动端口是50070,当我们通过浏览器访问hdfs的文件系统的时候,其实就是使用的WebHdfsFileSystem

那如何获取FileSystem呢

FileSystem提供了3个静态方法来获取特定的文件系统

FileSystem get(Configuration conf);

FileSystem get(URI uri,Configuration conf);

FileSystem get(,URI uri,Configuration conf,String user);

第二个方法会根据uri的schema 来获取对应的文件系统。看了下源码系统会预加载一些文件系统,代码如下

private static void loadFileSystems() {
synchronized (FileSystem.class) {
if (!FILE_SYSTEMS_LOADED) {
ServiceLoader<FileSystem> serviceLoader = ServiceLoader.load(FileSystem.class);
for (FileSystem fs : serviceLoader) {
SERVICE_FILE_SYSTEMS.put(fs.getScheme(), fs.getClass());
}
FILE_SYSTEMS_LOADED = true;
}
}
}但是跟踪了serviceLoader,却没看到如何加载FileSystem的

,纠结.......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: