143.6. このコンポーネントを OSGi で使用する
このコンポーネントを OSGi 環境で実行する場合、Hadoop 2.x がさまざまな org.apache.hadoop.fs.FileSystem
実装を検出するために使用するメカニズムに関連するいくつかの特異な点があります。Hadoop 2.x は、利用可能なファイルシステムのタイプと実装を定義する /META-INF/services/org.apache.hadoop.fs.FileSystem
ファイルを探す java.util.ServiceLoader
を使用します。OSGi 内で実行している場合、これらのリソースは使用できません。
camel-hdfs
コンポーネントと同様に、デフォルトの設定ファイルはバンドルクラスローダーから見える必要があります。これに対処する一般的な方法は、core-default.xml
(および hdfs-default.xml
など) のコピーをバンドルルートに保持することです。
143.6.1. 手動で定義されたルートでこのコンポーネントを使用する
以下の 2 つのオプションがあります。
-
/META-INF/services/org.apache.hadoop.fs.FileSystem
リソースを、ルートを定義するバンドルとともにパッケージ化します。このリソースには、必要な Hadoop 2.x ファイルシステムの実装がすべてリストされている必要があります。 -
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); ...
143.6.2. ブループリントコンテナーでこのコンポーネントを使用する
2 つのオプション:
-
/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 スキームをファイルシステム実装に正しくマッピングします。