【发布时间】:2016-01-11 11:25:36
【问题描述】:
我正在构建一个 Spark 应用程序,该应用程序利用了 Ruby 中已经开发的一些功能。
我选择通过在 ruby 中定义 MyProxy 类并使用 JRuby 编译来从我的 Scala main 调用 Ruby 部分。
然后我可以使用MyProxy 来调用保留在脚本中的其余Ruby 代码。最重要的原因是我无法用 JRuby 编译它们,可能是因为它们太动态了:
## myProxy.rb -> compiled into myProxy.class
## jrubyc --javac myProxy.rb
require 'java'
java_package 'ruby.proxy'
require_relative 'some.rb'
class MyProxy
def self.invoke_script()
... ## invoke some other ruby in script that are note compiled by jrubyc
end
end
还有 Scala Main:
object myRun extends App {
val something = MyProxy.invoke_script()
...
}
在运行时流程如下所示:
Main.class (scala) -> 调用 myProxy.class(myProxy.rb 的编译 ruby) -> 在 script.rb 中调用函数
它有效,我能够为 Scala 和编译的 ruby 部分制作一个可运行的 jar。但是当我运行它时:java -jar myApp.jar,
它仍然需要访问我的 myProxy.rb 文件,当然还有所有其他的 scrips.rb。
因此,执行此命令时,我需要工作目录中所有 ruby 脚本的副本。
理想情况下,我还想在 myApp.jar 中包含所有 ruby 脚本,并且能够轻松部署到 spark 集群上。 这可能吗?如何实现?
我看过warbler 和rawr。但是,我看不出这些工具如何在这种混合环境中帮助我(主要是 Java,部分是编译的 ruby,部分是纯脚本)。
任何帮助表示赞赏!
【问题讨论】: