整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

2.7. Hadoop文件系统

hadoop 花牛 8℃ 0评论

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文件系统。

2.7.1. HTTP

通过HTTP来访问HDFS有两种方法:直接访问,HDFS后台进程直接服务 于来自客户端的请求;通过代理(一个对多个)访问,客户端通常使用 DistributedFileSystemAPI访问HDFS。这两种方法如图3-1所示。

 

在第一种情况中,由namenode内嵌的web服务器(运行在端口 50070上)提 供目录服务,目录列表以XML或者JSON格式存储,并且文件数据由 datanode的web服务器(运行在端口 50075上)以数据流的形式传输。

原来那个的HTTP接口 (HFTP和HSFTP)是只读的,但是新的WebHDFS实 现支持所有的文件系统操作,包括Kerberos认证。WebHDFS必须通过将dfs.webhdfs.enable选项设置为真后才能启用,并且只有启用它之后,你才可以使用webhdfs URI。

第二种方法依靠一个或者多个独立代理服务器通过HTTP访问HDFS。(由于代理服务是无状态的,因此可以运行在标准的负载均衡器之后。)所有到集群的网络通信都需要经过代理。使用代理服务器后可以使用更严格的防 火墙策略和带宽限制策略。通常情况下通过代理服务器,实现在不同数据 中心中部署的Hadoop集群之间的数据传输。

原来那个的HDFS代理服务器是只读的并且客户端 使.用HSFTP Filesystem实现(hsftp URI)进行访问。从1.0.0版本开始,实现了一个称为HttpFS的新代理服务器(具备读和写的能力),并且提供了 和WebHDFS的一样的HTTP接口,因此客户端可以通过webhdfs URI访 问这两类接口。 *

在规范正式定义了 WebHDFS中使用的HTTP REST API,以期望以后使用 非Java语言编写的客户端有望直接使用这个API。

2.7.2. C语言

Hadoop提供了一个名为libhdfs的C语言库,该语言库是Java, Filesystem接口类的一个镜像(它被写成访问HDFS的C语言库,但其实它可以访问全部Hadoop文件系统)。它使用Java原生接口(Java Native Interface,JNI)调用Java文件系统客户端。

这个C语言API与Java的API非常相似,但它的开发一般滞后于java API,因此目前一些新的特性可能还不支持。可以在Hapdoop发行包的 Libhdfs/docs/api目录找到CAPI的相关文档。

Hadoop中自带预先编译好的32位Linux的二进制编码,但对于其 他平台,需要按自行编译。

2.7.3. FUSE

用户空间文件系统(Filesystem in Userspace, FUSE)允许把按照用户空间实 现的文件系统整合成一个Unix文件系统。通过使用Hadoop的Fuse-DFS功 能模块,任何一个Hadoop文件系统(不过一般为HDFS)均可以作为一个标 准文件系统进行挂载。随后便可以使用Unix工具(如Is和cat)与该文件系 统交互,还可以通过任意一种编程语言调用POSIX库来访问文件系统。

Fuse-DFS是用C语言实现的,调用libhdfs并作为访问HDFS的接口。关于 如何编译和运行Fuse-DFS的文档,可以在Hadoop发行版目录中找到。

转载请注明:全栈大数据 » 2.7. Hadoop文件系统

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址