storm代码阅读(九)

2021SC@SDUSC

storm代码阅读(九)

2021SC@SDUSC

Task部分阅读(四)

创建Task数据

mk-task-data函数用来创建与Task相关的数据,其参数为Executor的数据executor-data以及该Task的TaskId。

代码如下:

(defn mk-task-data [executor-data task-id]
  (recursive-map
    :executor-data executor-data
    :task-id task-id
    :system-context (system-topology-context (:worker executor-data) executor-data task-id)
    :user-context (user-topology-context (:worker executor-data) executor-data task-id)
    :builtin-metrics (builtin-metrics/make-data (:type executor-data))
    :tasks-fn (mk-tasks-fn <>)
    :object (get-task-object (.getRawTopology ^TopologyContext (:system-context <>)) (:component-id executor-data))))

下面介绍一些成员变量:

:executor-data :为Task所在的Executor的数据。

:task-id :为该Task的序号,在整个Topology中是唯一的。

:system-context :通过调用system-topology-context方法获得。该方法会调用mk-topology-context-builder函数创建的TopologyContext对象,其传入的Topology对象是Worker通过system-topology函数产生的。system-topology函数的功能为在用户定义的Topology的基础上添加系统组件(如Acker Bolt等)。

:user-context :产生方法与:system-context类似,只不过:user-context是通过传入Worker的:topology对象来构建TopologyContext的,因此只包含用户定义的Topology。

:builtin-metrics :使用:builtin-metrics/make-data并根据Executor的类型来创建内置的统计信息如消息发送数目等。

:tasks-fn :是Task的核心成员,它通过mk-tasks-fn函数产生,主要用来选择消息的目标节点以及发送消息。

:object :对应于该Task所执行的Spout或Bolt对象。这里首先调用system-context的getRawTopology获取用户定义的Topology,即user-context的Topology对象,之后调用get-task-object方法,根据组件ID获取该组件所对应的Spout或Bolt对象。

get-task-object函数用于获取Task所对应的Spout或Bolt对象,代码如下:
在这里插入图片描述
第2~4行获得所有用户定义的spout、bolts和state-spout对象,每个组件只会属于其中一个集合。

第5~10行获取对应的ComponentObject类型,并调用getSetComponentObject方法将其转化为实际对象。

第11~15行进行判断,若obj为ShellComponent,则调用ShellSpout或者ShellBolt进行封装,传入的obj实际上为ShellSpout或者ShellBolt要启动的命令。在Storm中,我们利用ShellSpout以及ShellBolt来完成多语言处理,它们内部含有需要执行的命令。

第16~18行首先进行判断,若obj为JavaObject对象,并且该对象含有full_class_name以及args_list成员变量,则利用instantiate-java-object函数来创建JaveObject所代表的目标对象。

instantiate-java-object函数定义如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值