搜索

145.7. 在 OSGi 中使用此组件

download PDF

在与 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. 将此组件与手动定义的路由搭配使用

有两个选项:

  1. 使用定义路由的捆绑包,软件包 /META-INF/services/org.apache.hadoop.fs.FileSystem 资源。此资源应列出所有所需的 Hadoop 2.x 文件系统实施。
  2. 提供 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 容器一起使用

两个选项:

  1. 带有包含蓝图定义的捆绑包的 /META-INF/services/org.apache.hadoop.fs.FileSystem 资源。
  2. 将以下内容添加到蓝图定义文件中:
<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 方案到文件系统实施。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.