3

hbase は osgi 化されたバンドルとしてまだ利用できないため、maven felix プラグイン (hbase 0.92 および対応する hadoop-core 1.0.0) を使用してバンドルを作成することができ、両方のバンドルが OSGi で起動しています:)

また、結果のバンドルに hbase-default.xml が追加されます。結果の osgi-jar を開くと、構造は次のようになります。

  • 組織/
  • メタINF
  • hbase-default.xml

これは<Include-Resource>@${pkgArtifactId}-${pkgVersion}.jar!/hbase-default.xml</Include-Resource>

実際にhbaseに接続したいときに問題が発生します。hbase-default.xml が見つからないため、構成ファイルを作成できません。

hbase osgi バンドルは、hbase 接続の取得とデータベースのクエリに使用する必要がある別の osgi-bundle 内から使用されます。この osgi-bundle は、RCP アプリケーションによって使用されます。

私の質問は、バンドルが開始されたときに hbase-default.xml が見つかるように、どこに配置する必要があるかということです。または、ファイルが存在することを認識しないのはなぜですか?

ヒントをありがとう。

- 編集

逆コンパイラを見つけたので、構成のロードが実行されるソース (maven を介してソースを提供しない hadoop-core) を表示でき、Threads contextClassLoader が使用されていることがわかります (利用できない場合は、構成クラス自体)、リソースを見つけることができないように思えますが、説明によると、親もチェックする必要があります (ただし、OSGi 環境の親は誰ですか?)?

hbase を使用する必要がある OSGi バンドルからリソースを取得するテストを行い、作成した jar ファイルに hbase-default.xml を追加しました (上記を参照)。スレッドの contextClassLoader を取得すると、リソースが取得されます。コードをもう少し調べてみると、HBaseConfiguration のクラスローダーを設定する方法がないことに気付きました (ただし、「単純な」hadoop-Configuration のクラスローダーを設定することは可能ですが、HBaseConfiguration は継承していますが、作成手順はcreate() メソッド内で新しいオブジェクトを作成するだけなので、HBaseConfiguration では許可されません。

これを起動して実行する方法をいくつか考えていただければ幸いです:)

4

3 に答える 3

1

hbase-default.xml が CLASSPATH にある .jar ファイルにある場合、そのファイルは通常 Java プログラムによって検索されます。

hbase メーリング リストを読みました。

pom.xmlを確認してください。'process-resource' フェーズでは、hbase-default.xml の ' @@@VERSION@@@ ' が実際のバージョン文字列に置き換えられます。ただし、このフェーズ構成が「タスク」ではなく「ターゲット」に設定されている場合、置換は行われません。pom.xml を見て、そうであればラベルを修正してください。

于 2012-04-19T07:55:55.923 に答える
0

この問題に直面し、hbase を呼び出していたバンドルに hbase-site.xml を入れることで実際に修正しました。ここでアドバイスを見つけました:

OSGi でのこのコンポーネントの使用: このコンポーネントは OSGi 環境で完全に機能しますが、ユーザーによるいくつかのアクションが必要です。リソースをロードするために、Hadoop はスレッド コンテキスト クラス ローダーを使用します。通常、スレッド コンテキスト クラスローダーは、ルートを含むバンドルのバンドル クラス ローダーになります。そのため、デフォルトの設定ファイルはバンドル クラス ローダーから見えるようにする必要があります。これに対処する一般的な方法は、バンドル ルートに core-default.xml のコピーを保持することです。そのファイルは hadoop-common.jar にあります。

于 2013-05-27T08:47:02.553 に答える