storm -- nimbus解读
阅读原文时间:2021年04月20日阅读:1

关于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中的通道。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章