2013-06-23 49 views
41

“任务”我想通过下面的大文章“Understanding the parallelism of a Storm topology什么是风暴并行

学习Twitter的风暴但是我有点通过的“任务”的概念混淆。任务是组件的运行实例(喷嘴还是螺栓)?实际上有多个任务的执行者是说执行者多次执行相同的组件,我是否正确?

而且在一般意义上的并行,风暴将产生一个喷口或螺栓专用线程(执行者),但什么是通过具有多个任务执行人(线程)为可并行?我认为线程中有多个任务,因为一个线程按顺序执行,只会使线程成为一种“缓存”资源,避免为下一次任务运行产生新线程。我对么?

我可以通过自己花更多的时间来调查后清除这些困惑,但你知道,我们都爱计算器;-)

在此先感谢。

+1

我已阅读文档三次以清除相同的混淆,并解决了我的问题。 – pavan

回答

62

声明:我写了the article你引用你的问题上面。

但是我对“任务”的概念有些困惑。任务是组件的运行实例(喷嘴还是螺栓)?实际上有多个任务的执行者是说执行者多次执行相同的组件,我是否正确?

是的,是的。

此外,在一般的并行性意义上,Storm会为喷口或螺栓产生一个专用线程(执行程序),但是具有多个任务的执行程序(线程)对并行性有什么贡献?

运行每执行多个任务不增加并行的水平 - 执行人总是有它使用其所有的任务,这意味着对任务的执行顺序运行一个线程。

正如我在文章中写道:请注意:

  • 执行线程的数量是可以改变的拓扑结构开始后(见storm rebalance命令)。
  • 拓扑的任务数量是静态的。

并且根据定义,存在#executors <= #tasks的不变量。

因此,每个执行程序线程执行2个任务的一个原因是,您可以灵活地在未来拓展/扩展通过storm rebalance命令的拓扑,而无需使拓扑脱机。例如,想象一下,从15台机器的风暴集群开始,但已经知道下周还会添加10个盒子。在这里,你可以选择在已经在15个初始盒子上的25台机器的预期并行水平上运行拓扑(当然这比25盒子要慢)。一旦集成了额外的10个盒子,您就可以通过storm rebalance拓扑结构充分利用所有25个盒子,而无需任何停机时间。

对每个执行器运行2+任务的另一个原因是(主要是功能性)测试。例如,如果你的开发机器或CI服务器只有足够强大的运行能力,比如2个执行器以及机器上运行的所有其他东西,那么仍然可以运行30个任务(这里是每个执行器15个),以查看代码您的自定义Storm组合按预期工作。

实际上,我们通常每个执行者运行1个任务。

PS:请注意,Storm实际上会产生a few more threads behind the scenes。例如,每个执行器都有自己的“发送线程”,负责处理传出的元组。还有例如“系统级”的后台线程。 acking与“你的”线程一起运行的元组。 IIRC除了“你的”线程之外​​,Storm UI还会计算这些线程。

+1

谢谢Michael。现在非常清楚。 –

+0

@miguno我有一个问题,假设你最初有一个执行任务的螺栓(就像对一些批量元组进行分组操作一样),我怎样才能垂直扩展它?根据我的理解,每个工作人员本质上都是拓扑结构的“镜像”,但我如何垂直扩展以将负载分布到所有集群箱中。在这种情况下,我想将执行分组操作的螺栓数量从1更改为2(或更多)。你的意见澄清这将是非常棒的。 – jtimz