cascalog:在hadoop上启动uberjar和main

qyswt5oh  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(471)

我从如下文件编译了一个uberjar:

(defmain HadoopTest (:use 'cascalog.api) (defn bla ("alot of code"))

我在hadoop上运行uberjar,就像: $ hadoop jar myStandalone.jar clojure.main 我得到了一个repl,但是文件中没有任何内容被执行。我仍然需要手工输入(:use'cascalog.api)和(defnbla)。为什么会这样?我该怎么解决?
谢谢!

ehxuflar

ehxuflar1#

如果你提供一个类名给 hadoop jar <jar file> [<main class>] ... 它将调用 main 类中包含的方法。既然你用的是 clojure.main 在这里,一个repl将被旋转起来(因为这就是 clojure.main.main() 是应该做的)。
因此,要么使用正确的类(我猜是aot编译的clojure命名空间),要么将这些信息存储在uberjar中(例如,通过leiningen的 :main 输入项目文件)并省去类名,只调用 hadoop jar myStandalone.jar .

相关问题