Cascalog:Up and Run

运行 cascalog

经过几天的挣扎(业余时间),终于把 cascalog 运行起来。因为 hadoop 集群不是自己搭的,有一些关于安全方面的设置,对初学造成了一定的麻烦。反复尝试才跑起来。

创建项目

还是用 lein 来管理项目的依赖和打包。先运行 lein new cascalog-demo 来创建项目。修改 project.clj 如下:

(defproject cascalog-demo "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :jvm-opts ["-Dmapred.queue.job.name=apg_qashort_p3"]
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [org.apache.hadoop/hadoop-common "0.23.8"]
                 [org.apache.hadoop/hadoop-hdfs "0.23.8"]
                 [org.apache.hadoop/hadoop-mapreduce-client-core "0.23.8"]
                 [org.apache.hadoop/hadoop-mapreduce-client-common "0.23.8"]
                 [cascalog/cascalog-core "2.0.0-SNAPSHOT"]]
  :resource-paths ["/home/gs/conf/current" "resources"]
  :source-paths ["src/clj"]
  :aot [cascalog-demo.demo]
  :main cascalog-demo.demo)

添加 hadoop 配置

因为是直接在 hadoop 集群上尝试,没有尝试本地开发模式,所以需要考虑 hadoop 的集群配置。没有加配置前会报错找不到 namenode 之类的错误,后来又碰到通不过 KERBEROS 认证,默认的 hadoop queue 不可用等等错误。

在 project.clj 中的 :resource-paths ["/home/gs/conf/current" "resources"] 一行就是添加一些 hadoop 的配置。 其中 /home/gs/conf/current 是集群上的 $HADOOP_CONF_DIR 目录,包含了集群的基本配置。resources 是当前项目中的目录,其中会包含一个 job-conf.clj 文件,这个文件包含了一些提交 job 时的配置,内容如下:

{"hadoop.tmp.dir" "/tmp"
 "mapreduce.job.complete.cancel.delegation.tokens" "false"
 "mapred.job.queue.name" "queue_name"}

Demo 代码

创建文件 src/clj/cascalog_demo/demo.clj, 内容如下:

(ns cascalog-demo.demo
  (:use cascalog.api)
  (:use cascalog.playground)
  (:gen-class))
(defn -main
  []
  (?- (stdout) sentence))

打包运行

用 lein 把所有依赖包,以防在集群上没有权限装需要的 jar 包:lein uberjar

完成后会生成 target/cascalog_test-0.1.0-SNAPSHOT-standalone.jar

运行包:hadoop jar target/cascalog_test-0.1.0-SNAPSHOT-standalone.jar

你可能感兴趣的:(hadoop,clojure,Cascalog)