我从如下文件编译了一个uberjar:
(defmain HadoopTest (:use 'cascalog.api) (defn bla ("alot of code"))
我在hadoop上运行uberjar,就像: $ hadoop jar myStandalone.jar clojure.main 我得到了一个repl,但是文件中没有任何内容被执行。我仍然需要手工输入(:use'cascalog.api)和(defnbla)。为什么会这样?我该怎么解决?谢谢!
$ hadoop jar myStandalone.jar clojure.main
ehxuflar1#
如果你提供一个类名给 hadoop jar <jar file> [<main class>] ... 它将调用 main 类中包含的方法。既然你用的是 clojure.main 在这里,一个repl将被旋转起来(因为这就是 clojure.main.main() 是应该做的)。因此,要么使用正确的类(我猜是aot编译的clojure命名空间),要么将这些信息存储在uberjar中(例如,通过leiningen的 :main 输入项目文件)并省去类名,只调用 hadoop jar myStandalone.jar .
hadoop jar <jar file> [<main class>] ...
main
clojure.main
clojure.main.main()
:main
hadoop jar myStandalone.jar
1条答案
按热度按时间ehxuflar1#
如果你提供一个类名给
hadoop jar <jar file> [<main class>] ...
它将调用main
类中包含的方法。既然你用的是clojure.main
在这里,一个repl将被旋转起来(因为这就是clojure.main.main()
是应该做的)。因此,要么使用正确的类(我猜是aot编译的clojure命名空间),要么将这些信息存储在uberjar中(例如,通过leiningen的
:main
输入项目文件)并省去类名,只调用hadoop jar myStandalone.jar
.