我想为Hadoop添加类似S3的支持,以获得目前在Hadoop中不支持的不同对象存储。我无法弄清楚Hadoop是否有本机文件系统的插件模型。
实现NativeFileSystemStore接口并创建可以加载Hadoop的JAR是否很简单?还有更多吗?
答案 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的架构部分 - 例如:hdfs
,file
,local
,{{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)