我可以将Hadoop的NativeFileSystemStore作为插件提供吗?

时间:2016-05-10 01:14:00

标签: java hadoop plugins

我想为Hadoop添加类似S3的支持,以获得目前在Hadoop中不支持的不同对象存储。我无法弄清楚Hadoop是否有本机文件系统的插件模型。

实现NativeFileSystemStore接口并创建可以加载Hadoop的JAR是否很简单?还有更多吗?

1 个答案:

答案 0 :(得分:1)

它变得相对简单 - Hadoop正在为自定义FS使用反射,配置和/或服务。

如果是配置,请在core-site.xml中,如果您/用户定义:

<property>
  <name>fs.<schema>.impl</name>
  <value>me.elijah.AwesomeFS</value>
  <description>The FileSystem for <schema> uris.</description>
</property>
<property>
  <name>fs.AbstractFileSystem.<schema>.impl</name>
  <value>me.elijah.AwesomeAbstractFS</value>
  <description>The AbstractFileSystem for <schema> for Hadoop 2.x only</description>
</property>

请注意<schema>部分,您可以在此处定义URI的架构部分 - 例如:hdfsfilelocal,{{1 },s3 ...只要遇到URI,Hadoop的文件系统不可知部分将解析模式,并通过配置和反射获取正确的类/实现。

这些自定义文件系统类应该通过jar在classpath中可用,这实际上是你想要集成自定义文件系统的所有功能。当然这些类必须实现某些接口:

  • gs
  • me.elijah.AwesomeFS extends org.apache.hadoop.fs.FileSystem

如果您想使用Hadoop 2.x / YARN,则需要me.elijah.AwesomeAbstractFS extends org.apache.hadoop.fs.AbstractFileSystem

如果您想自动注册文件系统,可能需要通过服务文件(example)发布它。此外,如果您添加自己的服务文件并碰巧生成装配罐,请确保使用合理的合并策略(您不想丢失某些服务) - 最适合我的方法是过滤不同的行或合并me.elijah.AwesomeAbstractFS服务文件(example