【问题标题】:Trying to access HBase Java API with JRuby on Rails/Trinidad尝试使用 JRuby on Rails/Trinidad 访问 HBase Java API
【发布时间】:2012-06-18 09:36:55
【问题描述】:

我正在尝试在 Rails 3.2 应用程序中将 HBase Java API 与 Trinidad 一起使用。 当我将所有 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 类找不到。

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

【问题讨论】:

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


    【解决方案1】:

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

    而不是调整初始化程序,这样当它在 java web-server 中运行时它不会加载 jars(Webrick 是一个 ruby​​ web-server,碰巧在 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 的配置/资源加载的一些了解。

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多