版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
交朋友增体面,不如交朋友益身心
教子弟求显荣,不如教子弟立品行
推荐书目电子版下载
Hadoop必读书目(精选)
本文参考文献包含于上述书籍
HDFS快速入门
HDFS知识梳理详细版
HDFS文件系统详细介绍
Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现
Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoop中一个文件系统的客户端接口,并且该抽象类有几个具体实现,其中和Hadoop紧密相关的见下表
文件系统 | URI方案 | Java实现(都在org.apache.hadoop包中) | 描述 |
---|---|---|---|
Local | file | fs.LocalFileSystem | 使用客户端校验和的本地磁盘文件系统 使用RawLocalFileSystem表示无校验和的本地磁盘文件系统 |
HDFS | hdfs | hdfs.DistributedFileSystem | Hadoop的分布式文件系统 将HDFS设计成与MapReduce结合使用,可以实现高性能 |
WebHDFS | Webhdfs | Hdfs.web.WebHdfsFileSystem | 基于HTTP的文件系统,提供对HDFS的认证读/写访问 |
Secure WebHDFS | swebhdfs | hdfs.web.SWebHdfsFileSystem | WebHDFS的HTTPS版本 |
HAR | har | fs.HarFileSystem | 一个构件在其他文件系统之上用于文件存档的文件系统 Hadoop存档文件系统通常用于将HDFS中的多个文件打包成一个存档文件,以减少NameNode内存的使用 使用Hadoop的 achive 命令来创建HAR文件 |
View | viewfs | viewfs.ViewFileSystem | 针对其他Hadoop文件系统的客户端挂载表 通常用于为联邦NameNode创建挂载点 |
FTP | ftp | fs.ftp.FTPFileSystem | 由FTP服务器支持的文件系统 |
S3 | S3a | fs.s3a.S3AFileSystem | 由Amazon S3支持的文件系统,代替老版本的s3n(S3 原生)实现 |
Azure | wasb | fs.azure.NativeAzureFileSystem | 由Microsoft Azure支持的文件系统 |
Swift | swift | fs.swift.snative.SwiftNativeFileSystem | 由OpenStack Swift支持的文件系统 |
Hadoop对文件系统提供了许多接口,它一般使用URI方案来选取合适的文件系统实例进行交互
命令hadoop fs -ls file:////
可以列出本地文件系统根目录下的文件
接口
Hadoop是用Java写的,通过Java API可以调用大部分Hadoop文件系统的交互操作,比如文件系统的命令解释器就是一个Java命令,它是用Java的FileSystem类来提供文件系统操作
下面是一些文件系统接口介绍,这些接口通常与HDFS一同使用,因为Hadoop中的其它文件系统一般有访问基本文件系统的工具,但它们大多数都能用于任何Hadoop文件系统
- HTTP
- 由WebHDFS协议提供的HTTPP REST API使得其他语言开发的应用能够很方便地与HDFS交互
- HTTP接口比原生的Java客户端要慢,尽量不要使用它来传输特大数据
- 通过HTTP访问HDFS有两种方法,两者都使用了WebHDFS协议
- 直接访问
HDFS守护进程直接服务于来自客户端的HTTP请求 - 通过代理(一个或多个)访问
客户端通常使用DistributedFileSystem API访问HDFS
- 直接访问
- C语言
- Hadoop提供一个名为libhdfs的C语言库,该语言库是Java FileSystem接口类的一个镜像(它被写成访问HDFS的C语言库,但其实它可以访问任何一个Hadoop文件系统)
- 使用Java原生接口(JNI)调用Java文件系统客户端
- 还有一个libwebhdfs库,该库使用了WebHDFS接口
- 其开发滞后于Java API,一些新特性不支持
- NFS
- 使用Hadoop的NFSv3网关将HDFS挂载为本地客户端的文件系统是可行的
- 可以使用Unix实用程序(如ls和cat)与该文件系统交互,上传文件,通过任意一种编程语言调用POSIX库来访问文件系统
- 关于如何配置和运行NFS网关,以及如何从客户端连接网关,可以参考Hadoop官网相关文档资料
- FUSE
- 用户空间文件系统(Filesystem in Userspace)允许将用户空间实现的文件系统作为Unix文件系统进行集成
- 通过使用Hadoop的Fuse-DFS功能模块,HDFS(或任何一个Hadoop)文件系统均可以作为一个标准的本地文件系统进行挂载
- Fuse-DFSS是用C语言实现的,使用libhdfs作为访问HDFS的接口
- 在写操作时,Hadoop NFS网关对于挂载HDFS来说是更健壮的解决方案,相比Fuse-DFS而言应优先选择
有疑问的朋友可以在下方留言或者私信我,我尽快回答
欢迎各路大神萌新指点、交流!
求关注!求点赞!求收藏!