Cascalog:在hadoop上开始uberjar和main

时间:2013-10-29 13:11:34

标签: hadoop clojure uberjar cascalog

我从像以下文件中编译了一个uberjar:

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

我在hadoop上运行uberjar,如:

$ hadoop jar myStandalone.jar clojure.main

我得到了一个REPL,但没有执行该文件。我仍然需要手工输入(:使用'cascalog.api)和(defn bla)。为什么会这样,我该如何解决?

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您为hadoop jar <jar file> [<main class>] ...提供了一个类名,它将调用该类中包含的main方法。由于您在此处使用clojure.main,因此将调出REPL(因为这是clojure.main.main()应该执行的操作。)

所以,要么使用正确的类(我猜是你的AOT编译的Clojure命名空间),要么将这些信息存储在你的Uberjar中(例如通过项目文件中的Leiningen的:main键),并省略类名,仅调用hadoop jar myStandalone.jar