尝试使用JRuby on Rails / Trinidad访问HBase Java API

时间:2012-06-18 09:36:55

标签: ruby-on-rails jruby hbase trinidad-gem

我正在尝试在Rails 3.2应用程序中使用带有Trinidad的HBase Java API。 当我将所有jar文件放入Rails.root / lib / jars时,一切正常,这是Trinidad首选的* .jar文件夹。

当我尝试通过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类无法找到。

您对如何解决这个问题有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这可能不是“正确”的答案,但您可以自定义Trinidad的jars路径以指向应用程序的/var/apps/jars(使用命令行或使用 trinidad.yml 配置)

比调整初始化程序所以当它在java web服务器中运行时它不会加载jar(Webrick是一个ruby web服务器,它恰好与JRuby一起运行,因为它是用纯Ruby编写的),例如:

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

至于你遇到的问题很可能是hbase.jar和/或hadoop.jar特有的(类加载器在一个简单的jruby应用程序和一个jruby servlet应用程序中看起来会有所不同),如果没有更多的东西,很难说信息,如堆栈跟踪,jar版本,最重要的是对hadoop配置/资源加载的一些了解。