HDFS架构和分布式文件系统

第二章 HDFS架构和分布式文件系统

2.1 HDFS文件系统架构

       采用主从(master-slave)架构,整个集群由一个NameNode、一个SecondaryNameNode和若干DataNode组成。NameNode是中心服务器,负责整个文件系统的命名空间元数据和客户端对文件的访问。SecondaryNameNode是NameNode的备份节点。一个节点运行一个DataNode,负责数据存储,并在NameNode控制下进行数据的读写和出错处理。

2.2 Hadoop的抽象文件系统模型

       Hadoop提供了一个抽象的文件系统模型,HDFS只是其中一个具体实现。Hadoop抽象文件系统的类文件都在org.apache.hadoop.fs包中,这些类主要完成文件系统模型的建立、定义对文件系统中的文件所进行的抽象操作等。

2.2.1 FileSystem抽象文件系统

      是Hadoop中所有文件系统的抽象父类,定义了文件系统所具有的基本特征(文件系统的缓存、文件系统在缓存中的键实例、文件系统的统计信息、统计信息的映射、文件系统关闭时需要清空的文件路径)和基本操作。

2.2.2 FileStatus文件状态信息

      代表一个文件或者目录的元数据信息(文件路径、文件长度、副本数、快的大小、最后修改时间、最后访问时间、操作权限、拥有者、所属的组)。

2.2.3 FsPermission文件或目录的操作权限

      所在的包为org.apache.hadoop.fs.permission,代表一个文件或目录的操作权限。采用与Linux类似方式来管理文件操作权限,包括读、写和可执行。Hadoop内部使用FsAction枚举类型来代表用户可以对文件进行的操作。

2.2.4 FileSystem的实现类

      FileSystem的6个直接子类:

 1) FllterFileSystem。是一个包装类,所有的功能都是依靠包装FileSystem来实现的。以下为两个直接子类:

             1.1)    ChecksumFileSystem。该类是所有基于校验和的文件系统的抽象类,会为每一个原生文件创建一个扩展名为.crc 的校验和文件,可以检查原生问及那的完整性。

                     1.1.1)LocalFileSystem。该类在本地文件系统的基础上增加了校验和的功能。以RawLocalFileSystem作为基本的原生文件系统。

            1.2)    HarFileSystem。该类是Hadoop归档文件系统的实现类。归档文件的主要作用就是将一些小文件合并成一个大文件,从而减少NameNode的内存消耗量。归档文件用har作为后缀名。一个归档文件包括:一个形如_index* 的索引文件和一个形如par-* 格式的数据文件。索引文件又包括_masterindex 主索引和_index普通索引文件。

 2) FTPFileSystem。所在的包为org.apache.hadoop.fs.ftp,为Apache Commons Net的FTPCLient提供了访问Hadoop文件系统的接口。(Apache Commons Net 是封装了很多网络协议的工具包,使用FTPClient类读写FTP)。

3) KosmosFileSystem。所在的包为org.apache.hadoop.fs.kfs。KFS和HDFS一样是分布式文件系统。

4) NativeS3FileSystem。所在的包为 org.apache.hadoop.fs.s3native。该类用于读写存储在AmazonS3中的文件。(Amazon S3是一个公开的服务,Web应用程序开发人员可以用它存储数字资产)。

5) S3FileSystem。所在的包为org.apache.hadoop.fs.s3,该类会将文件分割成数据块的形式保存到AmazonS3服务器上。

6) RawLocalFileSystem。该类实现了FileSystem的API的原生本地文件系统,可以作为一个具有最基本功能的文件系统。提供了用于对本地文件进行读写操作的TrackingFileInputStream、LocalFSFileInputStream和LocalFSFIleOutputStream。其中TrackingFIleInputStream在读数据时,会将读取到的字节数添加到统计信息中。LocalFSFileInputStream类中包含一个FileInputStreamfis 成员变量,且在构造方法中用TrackingFIleInputStream进行初始化。LocalFSFileOutputStream 类中也包含了一个FileOutputStreamfos成员变量同时实现org.apache.hadoop.fs.Syncable接口,使得文件输出流类能够实现并调用该接口定义的sync()方法,实现强制对基本设备的缓冲区执行同步操作。

2.4.5 FileSystem 输入流

      Hadoop提供FSInputStream抽象类,继承自InputStream,实现了Seekable和PositionedReadable接口。包括FSInputChecker(加入HDFS需要的校验功能)和 FTPInputStream 两个具体实现子类。

      当FileSystem调用open方法打开一个文件时,open方法会返回一个用于从文件中读取数据的FSDataInputStream输入流对象。FSDataInputStream继承自DataInputStream类,且实现了Seekable(提供流式搜索功能)、PositionedReadble(为文件输入流提供定位流式读取功能)和Closeable 接口。其中的方法都是通过调用InputStream in成员变量的对应方法来实现的具体功能的。

2.4.6 FileSystem输出流

      当FileSystem调用create方法来创建一个新文件时,create方法会返回一个用于将数据写入到文件额FSDataOutputStream输出流对象。它继承自DataOutputStream类,而且实现了Syncable接口。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值