Hadoop FileSystem文件系统的概要学习

在学习Hadoop FileSystem模块之前,最好的建议就是先去学习一下Linux本地文件系统的设计实现,这将会大大的帮助你了解Hadoop FileSystem,至少很多思想都是共通的。其实老实说,Hadoop FileSystem的确是集成了很多文件系统的诸多优点,在设计上还是有非常多值得学习的地方的。这里说的FileSystem可不是就仅仅的是HDFS,HDFS只是他的一个实现。也就是FileSystem是在其上的所有文件系统的一个抽象,的确上特也就是一个抽象类。

FileSystem介绍

在隆重介绍词文件系统之前,得先介绍一个概念,VFS(虚拟文件系统),面对用户的是一系列的函数接口,read().write()等等文件系统中常用的方法,但是用户不知道他使用的到底是哪种文件系统,而最后处理的确实不同的实现子类,可能是子文件系统1,子文件系统2又或者是子文件系统3。所以这就会造成一个虚拟文件系统的概念。这么做的好处就是扩展性非常强,面向接口的模式,如果你又要开发出某一需求下的文件系统,接口统统不用变。下面是一个VFS模型图:

而 Hadoop FileSystem也正是扮演着上面的角色。不过人家系统上的操作还有点带有NFS网络文件系统的味道,因为分布式文件系统的数据要通过网络传输的。下面是我整理的Hadoop FilsSystem庞大的继承实现类的关系,里面被我省去了几个实现的子类。

我们关注几个主要的InMemoryFileSystem内存文件系统,不过上面建议最好不要用了,LocalFileSystem本地文件系统还有第一个ChecksumDistributeFileSystem拥有校验和功能的分布式文件系统。我们说的HDFS的全名类叫DistributedFileSystem,是直接继承FileSystem的,作者把这个类放在了hdfs的包内,并没有在Hadoop Common模块中。

FileSystem包的结构

fs包的结构用下面一张图来概括,由于我所学习的代码版本较早支持的文件系的子类还不是很多,就几个,这个要注意一下:

FileSystem IO输入输出系统

IO的输入输出系统的类的设计至关重要,因为这回关联着后面的各个文件系统所要依赖于此进行操作的,因为涉及的类的确是比较庞杂的,我选择了以类图的形式,最直接明了

输出流的类图:

不知道为什么,输出相关类比输入相关类的东西少,我以为会非常对称的。

FileSystem文件基本描述

在这么庞大的文件系统中,文件的基本表现形式到底是作业的呢,在java,我们都知道是存放在File这个里的了,里面还有各种关于文件操作的诸多方法,在Hadoop系统中,是在一个FileStatu文件状态类;

public class FileStatus implements Writable, Comparable {
  //文件路径,里面包含了URI统一资源标志符
  private Path path;
  //文件长度
  private long length;
  //是否为目录
  private boolean isdir;
  //block副本数
  private short block_replication;
  //block块的大小
  private long blocksize;
  //最后一次文件修改的时间
  private long modification_time;
  //最后文件访问的时间
  private long access_time;
  //文件的读写权限,针对创建者,用户组和其他人
  private FsPermission permission;
  //文件的主人
  private String owner;
  //文件所属组
  private String group;
  .....

里面包含了文件的很多元数据的信息。重点关注2个,Path,和FsPermission,1个管路径,1个管权限:

public class Path implements Comparable {

  /** The directory separator, a slash. */
  public static final String SEPARATOR = "/";
  public static final char SEPARATOR_CHAR = '/';

  public static final String CUR_DIR = ".";

  static final boolean WINDOWS
    = System.getProperty("os.name").startsWith("Windows");
  //包含了Uri资源统一标识符
  private URI uri;                                // a hierarchical uri
  ...

通过uri的方式去定位文件,下面FsPermission的:

public class FsPermission implements Writable {
  private static final Log LOG = LogFactory.getLog(FsPermission.class);
  ....

  //POSIX permission style
  //对用户,用户组,其他人分别有不同的访问权限
  private FsAction useraction = null;
  private FsAction groupaction = null;
  private FsAction otheraction = null;
  ....

看到这里,其实他用的文件管理权限的处理跟Linux下的方式是基本一样的,通过对于用户人,用户组,其他人分别有不同的访问权限,通过rwx,3位的方式表示,这个了解Linux文件权限管理的同学一定很熟,就不啰嗦了,

public enum FsAction {
  // POSIX style
  //用3位表示,代表了8种的读写可能性
  NONE("---"),
  EXECUTE("--x"),
  WRITE("-w-"),
  WRITE_EXECUTE("-wx"),
  READ("r--"),
  READ_EXECUTE("r-x"),
  READ_WRITE("rw-"),
  ALL("rwx");
  ....

总结

了解Hadoop FileSystem,主要是要学习的他的设计,力求简洁,具体想要了解里面的文件系统的实现细节,则要选择更深的角度去学习。

时间: 2024-10-04 00:22:01

Hadoop FileSystem文件系统的概要学习的相关文章

深入理解HDFS:Hadoop分布式文件系统

文本详细介绍了HDFS中的许多概念,对于理解Hadoop分布式文件系统很有帮助. 1. 介绍 在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储.统一管理分布在集群上的文件系统称为分布式文件系统.而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失. 传统的网络文件系统(NFS)虽然也称为分布式文件系统,但是其存在一些限制.由于NFS中,文件是存储在单机上,因此无法提供可靠性保证,当很多客户端同时访问NFS Serve

Hadoop的文件系统

Hadoop整合了众多文件系统,它首先提供了一个高层的文件系统抽象类org.apache.hadoop.fs.FileSystem,这个抽象类展示了一个分布式文件系统,并有几个具体实现. 如下表所示. Hadovp提供了许多文件系统的接口,用户可使用URI方案选取合适的文件系统来实现交互.比如,可以使用文件系统命令行接口来进行Hadoop文件系统的操作.如果想列出本地文件系统的目录,那么执行以下shell命令即可: hadoop fs -ls file:/// (1)接口 Hadoop是使用Ja

大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)

分布式文件系统即是网络中多台计算机组合在一起提供一个统一存储及管理的系统. Hadoop提供了一个文件系统接口和多个分布式文件系统实现,其中比较重要的就是HDFS(Hadoop Distributed Filesystem)了.Hadoop是一个综合性的文件系统抽象,因此它也可以集成其他文件系统的实现,如本地文件系统和Amazon S3系统及淘宝 TFS等. 1.概念模型 HDFS以流式数据访问模式来存储超大文件,运行于商业硬件集群上. HDFS实现下来,分为两类节点,一个是namenode及s

hadoop FileSystem类和SequenceFile类实例

Hadoop的FileSystem类是与Hadoop的某一文件系统进行交互的API,虽然我们主要聚焦于HDFS实例,但还是应该集成FileSystem抽象类,并编写代码,使其在不同的文件系统中可移植,对于测试编写的程序非常重要.可以使用本地文件系统中的存储数据快速进行测试. 一.从Hadoop FileSystem读取数据 1.java.net.URL private FileSystem fs; /** * 通过FsUrlStreamHandlerFactory实例调用java.net.URL

Hadoop FileSystem类

声明:代码来自<Hadoop应用技术开发详解>4.7.2,版权归作者所有. 1. 概述 文件在Hadoop中表示为一个Path对象,可以把路径看做是Hadoop文件系统的URI,例如:hdfs://master:9000/user/hadoop/study/mr/WordCount/input/file1.txt FileSystem是Hadoop中文件系统的抽象父类,Configuration对象封装了客户端或者服务器端的配置信息. 通过FileSystem类访问Hadoop中的文件,基本方

Hadoop分布式文件系统HDFS详解

Hadoop分布式文件系统即Hadoop Distributed FileSystem.        当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并存储到若干台单独的计算机上,管理网络中跨越多台计算机存储的文件系统成为分布式文件系统(Distributed FileSystem).    该系统架构与网络之上,势必引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂.例如:使文件系统能够容忍节点故障且不丢数据便是一个极大的挑战. 

【翻译笔记】Hadoop分布式文件系统

摘要 Hadoop分布式文件系统(HDFS)设计用来可靠的存储超大数据集,同时以高速带宽将数据集传输给用户应用. 在一个超大集群中,数以千计的服务器直接接触存储器和执行用户应用任务.通过许多服务器的分布式存储和计算,资源随需求增长的时候仍然可以保持经济性. 我们解释了HDFS架构,同时介绍了我们在雅虎使用HDFS去管理25PB企业数据的经验. 1.介绍和相关工作 Hadoop的一个重要特点是将数据和计算能力划分为小部分,通过许多(数千)主机运行,这些主机并行计算得到他们的结果.一个Hadoop集

Hadoop之文件系统Shell

概述: 文件系统(FS)Shell包含各种类-Shell的命令,直接和Hadoop分布式文件系统(HDFS)交互,也支持对其他文件系统的支持,例如:本地文件系统FS,HFTP FS,S3 FS,和其他.FS Shell的调用: bin/hadoop fs <args> 所有的FS shell命令都要带URI路径作为参数,URI的格式是:scheme://authority/path.如果是HDFS,则scheme是hdfs,如果是本地文件系统,则scheme是file. scheme和auth

读《Hadoop权威指南》点滴-Hadoop分布式文件系统

Hadoop自带HDFS,即 Hadoop Distributed FileSystem(不是HaDoop  FileSystem 的简称) 适用范围 超大文件:最新的容量达到PB级 流式数据访问:HDFS的构建思路:一次写入.多次读取时最高效的访问模式 低时间延迟的数据访问不适用HDFS 大量的小文件的限制:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量.根据经验,每个文件.目录.数据块的存储信息大约占150字节.举例来说,