本帖最后由 fiberlijun 于 2009-11-19 17:10 编辑
org.apache.hadoop.fs.FileSystem
这个抽象类代表hadoop的一个文件系统,目前系统已经有很多个具体实现:
文件系统 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 fs.s3native.NativeS3FileSystem
S3 (blockbased) s3 fs.s3.S3FileSystem
Hadoop提供了很多接口来访问这些文件系统,最常用的是通过URI前缀来访问正确的文件系统。比如:
hadoop fs -ls file:///.......
hadoop fs -ls hdfs:///.......
MapReduce使用的文件系统
虽然理论上MapReduce可以使用上面这些系统,但是如果我们处理海量数据的话还是要选用一个分布式文件系统hdfs或者kfs。
代码片段[ol] private static FileSystem createFileSystem(URI uri, Configuration conf ) throws IOException { Class clazz = conf.getClass("fs." + uri.getScheme() + ".impl", null); if (clazz == null) { throw new IOException("No FileSystem for scheme: " + uri.getScheme()); } FileSystem fs = (FileSystem)ReflectionUtils.newInstance(clazz, conf); fs.initialize(uri, conf); return fs; }[/ol]复制代码hadoop-default.xml关于filesystem实现的配置
fs.file.impl=org.apache.hadoop.fs.LocalFileSystem
fs.hdfs.impl=org.apache.hadoop.hdfs.DistributedFileSystem
fs.s3.impl=org.apache.hadoop.fs.s3.S3FileSystem
s.s3n.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem
fs.kfs.impl=org.apache.hadoop.fs.kfs.KosmosFileSystem
fs.hftp.impl=org.apache.hadoop.hdfs.HftpFileSystem
fs.hsftp.impl=org.apache.hadoop.hdfs.HsftpFileSystem
fs.ftp.impl=org.apache.hadoop.fs.ftp.FTPFileSystem
fs.ramfs.impl=org.apache.hadoop.fs.InMemoryFileSystem
fs.har.impl=org.apache.hadoop.fs.HarFileSystem
增加文件系统
只要我们实现org.apache.hadoop.fs.FileSystem接口就可以增加一种hadoop能够访问的文件系统,非常的方便
fs.xxx.impl=org.apache.hadoop.fs.xxxFileSystem
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fiberlijun/archive/2009/11/13/4805966.aspx |