如何获取任务编号和 id 而不是 storm 中的执行者?
How to get the task number and id not the executor in storm?
我想知道用什么方法获取任务信息,不是执行者信息。而且我可以让执行者号>任务号,看来任务号没用。
我在Topologycontext
中使用了getComponentTasks()
,但我只能得到executors。
谁能帮帮我?
您可以使用
List<Integer> taskIds = context.getComponentTasks(context.getThisComponentId());
接收当前组件的所有任务 ID。如果要获取整个拓扑中的所有任务 ID,则需要按组件收集它们并将它们全部放在一起:
List<Integer> taskIds = new LinkedList<Integer>();
for(String compId : context.getComponentIds()) {
taskIds.addAll(context.getComponentTasks(compId));
}
任务 ID 是一个整数。执行者 ID 是一系列任务 ID。 1、2、3 是任务 ID。如果有一个执行者是 运行 所有这三个任务,它的 ID 将是 [1, 3] 这是一个 clojure 持久向量,低任务 ID 作为第一个元素,高任务 ID 作为第二个元素.
Matthias J. Sax 是正确的 context.getComponentTasks(compId) 将 return 该特定组件的完整任务 ID 集。
除非你做一些特别的事情,否则执行者的数量很可能与任务的数量相匹配。在那种情况下,执行者 ID 看起来像 [1, 1]、[2, 2] 和 [3, 3]。您可以使用 Nimbus Thrift 客户端的 rebalance 命令或 rebalance 方法调整每个组件的执行器数量。
据我所知,无法通过 TopologyContext 获取组件的执行程序数。如果您需要,我们可以添加一个,只需在 http://issues.apache.org/jira 中的 STORM 组件下提交一个 JIRA 您目前可以通过从 nimbus 获取 TopologySummary 来获取该信息,但这相当丑陋,尤其是因为所有信息都是您已经在 运行 的过程中,只是没有暴露给您。
如果您认为 getComponentTasks return 有什么不正确,请将 JIRA 作为具有可重现用例的错误提交,以便我们可以 debug/fix 为您解决。
根据 apache-dev-list 的 post,您使用的是 JStorm 而不是 Storm,对吗?
在 JStorm 中,没有执行器,所以 TopologyContext.getComponentTasks() returns 这个组件中的任务 ID。
关于邮件中问题的回答(我已经回复了邮件),如果你不介意的话,我就贴在这里作为你的参考:
do tasks actually have an ID?
在JStorm中,每个任务都有一个Integer类型的taskId。通常,每个组件都分配有一系列任务 ID(数量等于组件并行度)
if yes, can those IDs be retrieved?
是,使用 TopologyContext.getThisTaskId() 方法
can we get at least the number of tasks per operator somehow?
是,使用 TopologyContext.getComponentTasks().size()
should the above method get renamed?
我们可能会在合并阶段开始时讨论这个问题。以后可以参考相关的jira
我想知道用什么方法获取任务信息,不是执行者信息。而且我可以让执行者号>任务号,看来任务号没用。
我在Topologycontext
中使用了getComponentTasks()
,但我只能得到executors。
谁能帮帮我?
您可以使用
List<Integer> taskIds = context.getComponentTasks(context.getThisComponentId());
接收当前组件的所有任务 ID。如果要获取整个拓扑中的所有任务 ID,则需要按组件收集它们并将它们全部放在一起:
List<Integer> taskIds = new LinkedList<Integer>();
for(String compId : context.getComponentIds()) {
taskIds.addAll(context.getComponentTasks(compId));
}
任务 ID 是一个整数。执行者 ID 是一系列任务 ID。 1、2、3 是任务 ID。如果有一个执行者是 运行 所有这三个任务,它的 ID 将是 [1, 3] 这是一个 clojure 持久向量,低任务 ID 作为第一个元素,高任务 ID 作为第二个元素.
Matthias J. Sax 是正确的 context.getComponentTasks(compId) 将 return 该特定组件的完整任务 ID 集。
除非你做一些特别的事情,否则执行者的数量很可能与任务的数量相匹配。在那种情况下,执行者 ID 看起来像 [1, 1]、[2, 2] 和 [3, 3]。您可以使用 Nimbus Thrift 客户端的 rebalance 命令或 rebalance 方法调整每个组件的执行器数量。
据我所知,无法通过 TopologyContext 获取组件的执行程序数。如果您需要,我们可以添加一个,只需在 http://issues.apache.org/jira 中的 STORM 组件下提交一个 JIRA 您目前可以通过从 nimbus 获取 TopologySummary 来获取该信息,但这相当丑陋,尤其是因为所有信息都是您已经在 运行 的过程中,只是没有暴露给您。
如果您认为 getComponentTasks return 有什么不正确,请将 JIRA 作为具有可重现用例的错误提交,以便我们可以 debug/fix 为您解决。
根据 apache-dev-list 的 post,您使用的是 JStorm 而不是 Storm,对吗?
在 JStorm 中,没有执行器,所以 TopologyContext.getComponentTasks() returns 这个组件中的任务 ID。
关于邮件中问题的回答(我已经回复了邮件),如果你不介意的话,我就贴在这里作为你的参考:
do tasks actually have an ID?
在JStorm中,每个任务都有一个Integer类型的taskId。通常,每个组件都分配有一系列任务 ID(数量等于组件并行度)
if yes, can those IDs be retrieved?
是,使用 TopologyContext.getThisTaskId() 方法
can we get at least the number of tasks per operator somehow?
是,使用 TopologyContext.getComponentTasks().size()
should the above method get renamed?
我们可能会在合并阶段开始时讨论这个问题。以后可以参考相关的jira