Hadoop文件系統(tǒng)全家桶
Hadoop有一個抽象的文件系統(tǒng)概念,HDFS只是其中一個實現(xiàn)。Java抽象類org.apache.hadoop.fs.FileSystem定義了Hadoop中文件系統(tǒng)的客戶端接口,該抽象類有幾個具體的實現(xiàn)。
Hadoop文件系統(tǒng)
Local
URI方案:file
Java實現(xiàn):org.apache.hadoop.fs.LocalFileSystem
描述:使用客戶端校驗的本地磁盤文件系統(tǒng)。
HDFS
URI方案:hdfs
Java實現(xiàn):org.apache.hadoop.hdfs.DistributedFileSystem
描述:Hadoop的分布式文件系統(tǒng)。將HDFS設(shè)計成與MapReduce結(jié)合使用,可以實現(xiàn)高性能。
WebHDFS
URI方案:Webhdfs
Java實現(xiàn):org.apache.hadoop.hdfs.web.WebHdfsFileSystem
描述:基于HTTP的文件系統(tǒng),提供對HDFS的認(rèn)證讀/寫訪問。
Secure WebHDFS
URI方案:swebhdfs
Java實現(xiàn):org.apache.hadoop.hdfs.web.SWebHdfsFileSystem
描述:WebHDFS的HTTPS版本。
HAR
URI方案:har
Java實現(xiàn):org.apache.hadoop.fs.HarFileSystem
描述:一個構(gòu)建在其他文件系統(tǒng)上用于文件存檔的文件系統(tǒng)。Hadoop存檔文件系統(tǒng)通常用于將HDFS中的多個文件打包成一個存檔文件,以減少namenode的內(nèi)存使用。使用Hadoop的achive命令來創(chuàng)建HAR文件。
View
URI方案:viewfs
Java實現(xiàn):org.apache.hadoop.viewfs.ViewFileSystem
描述:針對其他Hadoop文件系統(tǒng)的客戶端掛載表。通常用于聯(lián)邦namenode創(chuàng)建掛載點。
FTP
URI方案:ftp
Java實現(xiàn):org.apache.hadoop.fs.ftp.FTPFileSystem
描述:由FTP服務(wù)器支持的文件系統(tǒng)。
S3
URI方案:S3a
Java實現(xiàn):org.apache.hadoop.fs.s3a.S3AFileSystem
描述:由Amazon S3支持的文件系統(tǒng)。
Azure
URI方案:wasb
Java實現(xiàn):org.apache.hadoop.fs.azure.NativeAzureFileSystem
描述:由Microsoft Azure支持的文件系統(tǒng)。
Swift
URI方案:swift
Java實現(xiàn):org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem
描述:由OpenStack Swift支持的文件系統(tǒng)。
接口
1. HTTP
Hadoop以Java API的方式提供文件系統(tǒng)訪問接口,非Java開發(fā)人員的應(yīng)用訪問HDFS很不方便。Hadoop中由WebHDFS協(xié)議提供的HTTP REST API則脫離了編程語言的限制。但是,HTTP接口比Java客戶端要慢很多。盡量不要用它來傳輸比較大的數(shù)據(jù)。
2. C語言
Hadoop提供了一個為libhdfs的C語言庫。這個C語言API和Java的API非常相似,但它的開發(fā)滯后于Java API,一些新特性得不到及時的支持。
3. NFS
使用Hadoop的NFSv3網(wǎng)關(guān)可以將HDFS掛載為本地客戶端的文件系統(tǒng)。掛載后便可以使用Unix系統(tǒng)的上命令(如ls和cat)與該文件系統(tǒng)交互。實際上他還是HDFS,修改文件只能通過追加的方式,不能隨機(jī)修改。
4. FUSE
用戶空間文件系統(tǒng)(FUSE),由Hadoop的Fuse-DFS模塊支持。不做解釋了,需要請查詢維基百科。Fuse-DFS相比于3中的NFS,NFS方案更優(yōu)。