初探
抽象類org.apache.Hadoop.fs.FileSystem代表hadoop的一個(gè)文件系統(tǒng),目前系統(tǒng)已經(jīng)有很多個(gè)具體實(shí)現(xiàn):
| 文件系統(tǒng) | URI前綴 | hadoop的具體實(shí)現(xiàn)類 |
|---|---|---|
| Local | file | fs.LocalFileSystem |
| HDFS | hdfs | hdfs.DistributedFileSystem |
| HFTP | hftp | hdfs.HftpFileSystem |
| HSFTP | hsftp | hdfs.HsftpFileSystem |
| HAR | har | fs.HarFileSystem |
| KFS | kfs | fs.kfs.KosmosFileSystem |
| FTP | ftp | fs.ftp.FTPFileSystem |
| S3 (native) | s3n | s.s3native.NativeS3FileSystem |
| S3 (blockbased) | s3 | fs.s3.S3FileSystem |
Hadoop提供了很多接口來訪問這些文件系統(tǒng),最常用的是通過URI前綴來訪問正確的文件系統(tǒng)。比如:
hadoop fs -ls file:///.......
hadoop fs -ls hdfs:///.......
雖然理論上MapReduce可以使用上面這些系統(tǒng),但是如果我們處理海量數(shù)據(jù)的話還是要選用一個(gè)分布式文件系統(tǒng)hdfs或者kfs。
配置
hadoop-default.xml關(guān)于filesystem實(shí)現(xiàn)的配置hadoop-default.xml:
<property>
<name>fs.file.impl</name>
<value>org.apache.hadoop.fs.LocalFileSystem</value>
<description>The FileSystem for file: uris.</description>
</property>
<property>
<name>fs.fms.impl</name>
<value>org.apache.hadoop.hdfs.FMSFileSystem</value>
<description>The FileSystem for hdfs: uris.</description>
</property>
<property>
<name>fs.hdfs.impl</name>
<value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
<description>The FileSystem for hdfs: uris.</description>
</property>
spark-client關(guān)于filesystem實(shí)現(xiàn)的配置core-site.xml:
<property>
<name>fs.file.impl</name>
<value>org.apache.hadoop.fs.LocalFileSystem</value>
<description>The FileSystem for file: uris.</description>
</property>
<property>
<name>fs.hdfs.impl</name>
<value>org.apache.hadoop.fs.DFileSystem</value>
</property>
<property>
<name>fs.webhdfs.impl</name>
<value>org.apache.hadoop.smw.hdfs.web.WebHdfsFileSystem</value>
</property>
HFTP介紹
HFTP 是hadoop文件系統(tǒng)用來讓你從一個(gè)遠(yuǎn)程的hadoop HDFS集群中讀取數(shù)據(jù)的組件。這個(gè)讀取是通過HTTP,并且數(shù)據(jù)源是DataNodes。HFTP是一個(gè)只讀的文件系統(tǒng),當(dāng)你試圖用來寫入數(shù)據(jù)或者修改文件系統(tǒng)狀態(tài)時(shí),會(huì)拋出異常。
HFTP 主要的幫助在有多個(gè)HDFS集群,并存在多個(gè)版本時(shí),將數(shù)據(jù)從一個(gè)集群遷移到另一個(gè)。HFTP 在不同版本的HDFS中是兼容寫的。你可以操作例如:
hadoop distcp -i hftp://sourceFS:50070/src hdfs://destFS:8020/dest
注意HFTP是只讀的,所以目標(biāo)端必須是HDFS文件系統(tǒng)。(在這個(gè)例子中,distcp會(huì)使用新文件系統(tǒng)的配置運(yùn)行。)
另外,HSFTP,默認(rèn)使用HTTPS。這意味著數(shù)據(jù)在傳輸?shù)臅r(shí)候會(huì)被加密。
https://hadoop.apache.org/docs/r2.6.3/hadoop-project-dist/hadoop-hdfs/Hftp.html
實(shí)現(xiàn)
HFTP的代碼在java 類org.apache.hadoop.hdfs.HftpFileSystem 中。同樣的,HSFTP也在org.apache.hadoop.hdfs.HsftpFileSystem中實(shí)現(xiàn).