0

Rails3.2アプリケーションでトリニダードでHBaseJavaAPIを使用しようとしています。すべてのjarファイルをRails.root/lib / jarsに入れると、すべて正常に機能します。これは、トリニダードが推奨する*.jar-folderです。

java.rb初期化ファイル(config / initializers内)を介してjarファイルをプロジェクトから分離しようとすると、正しく機能しません。(WebBrickを使用すると、すべてがスムーズに機能しますが、本番環境では使用できません。)

java.rb:

require 'java'

Dir['/var/apps/jars/*.jar'].each do |jar|
  require jar
end

Trinidadは問題なく起動しますが、HBaseConfigurationクラスを使用してリクエストがコントローラーにヒットするとすぐに、次のエラーがスローされます。

Java::JavaLang::RuntimeException (hbase-default.xml file seems to be for and old version of HBase (null), this version is 0.90.6-cdh3u4):

hbase-default.xmlはhbase-0.90.6-cdh3u4.jarファイル内にバンドルされているようですが、HBaseConfigurationクラスでは見つかりません。

これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

1

これはおそらく「正しい」答えではありませんが、Trinidad の jar パスをカスタマイズし/var/apps/jarsて、アプリケーションを指すようにすることができます (コマンド ラインまたはtrinidad.yml 構成を使用) 。

イニシャライザを調整して、Java Webサーバー内で実行するときにjarをロードしないようにします(Webrickは、純粋なRubyで記述されているため、たまたまJRubyで正常に動作するRuby Webサーバーです)例:

Dir['/var/apps/jars/*.jar'].each do |jar|
  require jar
end unless defined?($servlet_context)

あなたが抱えている問題については、おそらくhbase.jarおよび/またはhadoop.jar固有のものです(クラスローダーは、単純なjrubyアプリケーションとjrubyサーブレットアプリケーションで異なって見えます)、次のような詳細情報がないとわかりませんスタック トレース、jar のバージョン、そして最も重要なこととして、hadoop の構成とリソースの読み込みに関するある程度の理解。

于 2012-06-20T13:12:49.977 に答える