145.7. 在 OSGi 中使用此组件
在与 Hadoop 2.x 机制相关的 OSGi 环境中运行此组件时有一些要求,以发现不同的 org.apache.hadoop.fs.FileSystem 实施。Hadoop 2.x 使用 java.util.ServiceLoader,它查找定义可用文件系统类型和实施的 /META-INF/services/org.apache.hadoop.fs.FileSystem 文件。在 OSGi 中运行时,这些资源不可用。
与 camel-hdfs 组件一样,需要从捆绑包类加载程序中查看默认配置文件。处理它的一种典型方法是在您的捆绑包 root 中保留 core-default.xml (以及 hdfs-default.xml)的副本。
145.7.1. 将此组件与手动定义的路由搭配使用 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
有两个选项:
-
使用定义路由的捆绑包,软件包
/META-INF/services/org.apache.hadoop.fs.FileSystem资源。此资源应列出所有所需的 Hadoop 2.x 文件系统实施。 -
提供 boilerplate 初始化代码,它会在
org.apache.hadoop.fs.FileSystem类中填充内部静态缓存:
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.setClass("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class, FileSystem.class);
conf.setClass("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class, FileSystem.class);
...
FileSystem.get("file:///", conf);
FileSystem.get("hdfs://localhost:9000/", conf);
...
145.7.2. 将这个组件与 Blueprint 容器一起使用 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
两个选项:
-
带有包含蓝图定义的捆绑包的
/META-INF/services/org.apache.hadoop.fs.FileSystem资源。 - 将以下内容添加到蓝图定义文件中:
<bean id="hdfsOsgiHelper" class="org.apache.camel.component.hdfs2.HdfsOsgiHelper">
<argument>
<map>
<entry key="file:///" value="org.apache.hadoop.fs.LocalFileSystem" />
<entry key="hdfs://localhost:9000/" value="org.apache.hadoop.hdfs.DistributedFileSystem" />
...
</map>
</argument>
</bean>
<bean id="hdfs2" class="org.apache.camel.component.hdfs2.HdfsComponent" depends-on="hdfsOsgiHelper" />
这样,Hadoop 2.x 将正确映射 URI 方案到文件系统实施。