我正在寻找一种将新文件系统挂接到 Hadoop 中的方法,以针对 HDFS 对这个新文件系统的性能进行基准测试。我是 Hadoop 新手,所以如果我问错了问题,请随时纠正我。如果有帮助,我将使用亚马逊的 EMR。
4 回答
您将需要为您的新文件系统创建一个 Hadoop 文件系统驱动程序。这将是一个扩展类org.apache.hadoop.fs.FileSystem
。这种“驱动程序”的例子是众所周知的DistributedFileSystem
。HDFS,LocalFilesystem
等等S3FileSystem
。然后,您必须使用中的方案注册新文件系统core-site.xml
,假设您注册了“gaurav”:
<property>
<name>fs.gaurav.impl</name>
<value>com.package.GauravFileSystem</value>
</property>
您现在可以使用已注册的方案引用您自己的文件系统中的文件:gaurav://somepath/somename
. 或者,您可以通过更改将新文件系统设置为默认文件系统fs.default.name
。您的集群现在应该在您自己的文件系统之上运行(当然,如果一切正确且有效)。
例如,查看HADOOP-9629以获取完整 Hadoop 文件系统的示例。
是的,您可以在其他文件系统之上运行 hadoop,它们只需要实现 hdfs 接口。这是一个在名为tachyon的新文件系统上运行它的示例。在亚马逊上,显而易见的选择是在 S3 文件系统上运行。
不是这方面的专家,但让你的文件系统透明地支持 hadoop map reduce 似乎相对微不足道,这是 tachyon 是如何做到的TachyonFileSystem,基本上它只是扩展了 hadoop FileSystem 类。
不,Hadoop 只能与 HDFS 一起使用……MapR 正在使用另一个版本的 HDFS。
但是您可以在 DFS 上开发自己的 MapReduce 并将其与 Hadoop 进行比较。
另一种方法是利用ServiceLoader,通过放置一个带有路径的配置文件META-INF/services/org.apache.hadoop.fs.FileSystem
,并将合格的实现类名称作为值,我们可以得到这个文件系统,如下所示
FileSystem.get(new URI("{SCHEME}://" + "{VALUE}" + "/"), conf)