我想为hadoop中目前不支持的另一个对象存储添加类似s3的支持。我不知道hadoop是否有本地文件系统的插件模型。实现nativefilesystemstore接口和创建一个可以用hadoop加载的jar简单吗?还有别的吗?
voj3qocg1#
它变得相对简单—hadoop使用反射、配置和/或服务来定制fs。在配置的情况下,在 core-site.xml 如果您/用户定义:
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 , s3 , gs …无论何时遇到uri,hadoop的文件系统无关部分都将解析模式,并通过配置和反射获取适当的类/实现。这些自定义文件系统类应该可以通过jar在classpath中使用,这就是集成自定义文件系统所要做的一切。当然,这些类必须实现某些接口:me.elijah.AwesomeFS extends org.apache.hadoop.fs.FileSystem me.elijah.AwesomeAbstractFS extends org.apache.hadoop.fs.AbstractFileSystem 你需要 me.elijah.AwesomeAbstractFS 如果您想使用hadoop2.x/yarn。如果要自动注册文件系统,可能需要通过服务文件发布它(示例)。另外,如果您添加了自己的服务文件,并且碰巧生成了程序集jar,请确保使用合理的合并策略(您不希望丢失某些服务)-最适合我的策略是过滤不同的行或合并 org.apache.hadoop.fs.FileSystem 服务文件(示例)
<schema>
hdfs
file
local
s3
gs
me.elijah.AwesomeAbstractFS extends org.apache.hadoop.fs.AbstractFileSystem
me.elijah.AwesomeAbstractFS
org.apache.hadoop.fs.FileSystem
1条答案
按热度按时间voj3qocg1#
它变得相对简单—hadoop使用反射、配置和/或服务来定制fs。
在配置的情况下,在
core-site.xml
如果您/用户定义:请注意
<schema>
部分,这是定义uri的模式部分的地方-例如:hdfs
,file
,local
,s3
,gs
…无论何时遇到uri,hadoop的文件系统无关部分都将解析模式,并通过配置和反射获取适当的类/实现。这些自定义文件系统类应该可以通过jar在classpath中使用,这就是集成自定义文件系统所要做的一切。当然,这些类必须实现某些接口:
me.elijah.AwesomeFS extends org.apache.hadoop.fs.FileSystem
me.elijah.AwesomeAbstractFS extends org.apache.hadoop.fs.AbstractFileSystem
你需要me.elijah.AwesomeAbstractFS
如果您想使用hadoop2.x/yarn。如果要自动注册文件系统,可能需要通过服务文件发布它(示例)。另外,如果您添加了自己的服务文件,并且碰巧生成了程序集jar,请确保使用合理的合并策略(您不希望丢失某些服务)-最适合我的策略是过滤不同的行或合并
org.apache.hadoop.fs.FileSystem
服务文件(示例)