关于clojure:
ns : 命名空间
(bootstrap) : 把该类编译成java类 ??
gen-class : 把该类编译成java类
“:”在clojure中,代表关键字,出现的频率很高
clojure中的数据结构:
标量:数字、符号、关键字、字符串、字符
集合:list (1 2 3 4)、vector []、map { }、set #{ }
list:是用链表实现的,首尾操作方便
vector:类似于array,支持高效的用索引访问元素
& 接受可变实参
自带的一些方法:
if-let:
get:
mapcat:
->>:这是个宏。作为后续的操作的最后一个参数。
prewalk:
%:
Nimbus中的方法:
(defn file-cache-map [conf] ;
;该方法在nimbus-data中作为downloaders与uploaders使用
(TimeCacheMap.; 使用non-thread的rotating-map
(int (conf NIMBUS-FILE-COPY-EXPIRATION-SECS)) ;取整型
(reify TimeCacheMap$ExpiredCallback
(expire [this id stream]
;参数是k-v,stream与id在Nimbus$Iface中实现beginFileDownload等其他上传下载的方法时进行定义
(.close stream);超时之后的操作,关闭了传输流
))
))
(defn mk-scheduler [conf inimbus]
;这个方法定义了nimbus-data中的:scheduler,
(let [forced-scheduler (.getForcedScheduler inimbus);inimbus的forced-scheduler为nil
scheduler (cond;cond==case
forced-scheduler ;对forced-scheduler进行判断
(do (log-message "Using forced scheduler from INimbus " (class forced-scheduler))
forced-scheduler)
(conf STORM-SCHEDULER)
(do (log-message "Using custom scheduler: " (conf STORM-SCHEDULER))
(-> (conf STORM-SCHEDULER) new-instance))
:else
(do (log-message "Using default scheduler");who 调用的这个
(DefaultScheduler.)))]
(.prepare scheduler conf)
scheduler;最终返回scheduler
))
(defn inbox [nimbus]
(master-inbox (:conf nimbus)));创建storm.local.dir.nimbus.inbox的路径,提交任务时,向nimbus上传jar包就是上传到该路径下。
其中上传用到了java.nio.channels中的通道。