Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现。Java抽象类 org.apache.hadoop.fs.FileSystem 定义了 Hadoop 中的一个文件系统接口,并且该抽象类有几个具体实现,如表3-1所示。
表3-1 hadoop文件系统
文件系统 | URI方案 | Java实现(均包含在org.apache.hadoop 包中) | 描述 |
Local | file | fs.LocalFileSystem | 使用了客户端校验和的本地磁盘文件系统。没有使用校验和的本地磁盘文件系统RawLocalFileSystem。 |
HDFS | hdfs | hdfs.DistributedFileSystem | Hadoop的分布式文件系统。将 HDFS设计成与MapReduce结合 使用,可以实现高性能 |
HFTP | Hftp | hdfs.hftpFileSystem | 一个在HTTP上提供对HDFS只 读访问的文件系统(尽管名称为 HFTP,但与FTP无关)。通常与distcp结合使用(参见3.8节),以 实现在运行不同版本的HDFS的 集群之间复制数据 |
HSFTP | hsftp | hdfs.HsftpFileSyste | 在HTTPS上提供对HDFS只读访问的文件系统(同上,与FTP无关) |
WebHDFS | Webhdfs | 基于HTTP,对HDFS提供安全 读写访问的文件系统。WebHDFS 是为了替代HFTP和HSFTP而构 建的 | |
HAR | har | fs.HarFileSystem | 一个构建在其他文件系统之上用 于文件存档的文件系统。Hadoop 存档文件系统通常用于需要将 HDFS中的文件进行存档时,以 减少namenode内存的使用。 |
hfs
(云存储) |
kfs | CloudStore(其前身为Kosmos文件系统)是类似于HDFS或是谷歌的 GFS的文件系统,用C++写。详情 http://kosmosfs.sourceforge.net/ | |
FTP | ftp | fs.ftp.FTPFileSystem | 由FTP服务器支持的文件系统 |
S3
(原生) |
S3n | fs.s3native.NativeS3FileSystem | 由Amazon S3支持的文件系统。 |
S3
(基于块) |
S3 | fs.sa.S3FileSystem | 由Amazon S3支持的文件系统, 以块格式存储文件(与HDFS很相 似)以解决S3的5 GB文件大小 限制 |
分布式 RAID | hdfs | hdfs.DistributedRaidFileSystem | RAID版本的HDFS是为了存档而设计的。针对HDFS中的每个文件,创建一个(更小的)校验文件, 并允许HDFS中的数据副本由3 降为.2,由此可以减少25%~30% 的存储空间,但是数据丢失的概 率保持不变。分布式RAID模式需要在集群中运行一个RaidNode后台进程 |
View | viewfs | viewfs.ViewFileSystem | 针对其他Hadoop文件系统挂载的客户端表。通常用于联邦namenode建挂载点。 |
Hadoop对文件系统提供了许多接口,它一般使用URI方案来选取合适的 文件系统实例进行交互。举例来说,我们在前一小节中遇到的文件系统命令行解释器可以操作所有的Hadoop文件系统命令。要想列出本地文件系统根目录下的文件,可以输入以下命令:
% hadoop fs -Is file:///
尽管运行的MapReduce程序可以访问任何文件系统(有时也很方便),但在处理大数据集时,建议你还是选择一个有数据本地优化的分布式文件系统,如HDFS。
接口
Hadoop是用Java写的,通过Java API可以调用所有Hadoop文件系统的交互操作。例如,文件系统的命令解释器就是一个Java应用,它使用Java的FileSystem类来提供文件系统操作。其他一些文件系统接口也将在本小 节中做简单介绍。这些接口通常与HDFS —同使用,因为Hadoop中的其他文件系统一般都有访问基本文件系统的工具(对于FTP,有FTP客户端;对于S3,有S3工具,等等),但它们大多数都能用于任何Hadoop文件系统。
转载请注明:全栈大数据 » 3.4 Hadoop文件系统