初探
抽象类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| 文件系统 | URI前缀 | hadoop的具体实现类 |
| --- | --- | --- |
| 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提供了很多接口来访问这些文件系统,最常用的是通过URI前缀来访问正确的文件系统。比如:
> hadoop fs -ls file:///.......
> hadoop fs -ls hdfs:///.......
虽然理论上MapReduce可以使用上面这些系统,但是如果我们处理海量数据的话还是要选用一个分布式文件系统hdfs或者kfs。
## 配置
hadoop-default.xml关于filesystem实现的配置```hadoop-default.xml```:
``` 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关于filesystem实现的配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16``` 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文件系统用来让你从一个远程的hadoop HDFS集群中读取数据的组件。这个读取是通过HTTP,并且数据源是DataNodes。HFTP是一个只读的文件系统,当你试图用来写入数据或者修改文件系统状态时,会抛出异常。
HFTP 主要的帮助在有多个HDFS集群,并存在多个版本时,将数据从一个集群迁移到另一个。HFTP 在不同版本的HDFS中是兼容写的。你可以操作例如:
hadoop distcp -i hftp://sourceFS:50070/src hdfs://destFS:8020/dest
注意HFTP是只读的,所以目标端必须是HDFS文件系统。(在这个例子中,distcp会使用新文件系统的配置运行。)
另外,HSFTP,默认使用HTTPS。这意味着数据在传输的时候会被加密。
https://hadoop.apache.org/docs/r2.6.3/hadoop-project-dist/hadoop-hdfs/Hftp.html
实现
HFTP的代码在java 类org.apache.hadoop.hdfs.HftpFileSystem
中。同样的,HSFTP也在org.apache.hadoop.hdfs.HsftpFileSystem
中实现.