我正在尝试学习Storm提供的并行性和可伸缩性功能,并阅读以下文章http://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html。我很困惑,Storm是否支持数据或任务并行性。我能理解的(我可能错了)是Storm支持任务并行(因为并行度受拓扑中任务数量的限制)。如果是这种情况,那么它如何用于需要数据并行的大规模并行数据处理。
非常感谢任何帮助。谢谢:))
答案 0 :(得分:1)
Storm不遵循教科书术语。实际上,Storm确实支持数据,任务和流水线并行。
如果您有一个运算符并指定大于一的并行度(parallelism_hint
),您将获得参数指定的线程数,每个线程对不同的数据执行相同的代码,即,您获得数据并行即可。您可以进一步分配参数number_of_tasks
(必须是>= parallelism_hint
)以将输入数据拆分为number_of_task
分区/子流(即,比执行程序更多的分区)。因此,一些执行程序线程需要处理多个分区/子流(在Storm 中称为任务)。这不会增加并行性(可能是并发性)。但是,它允许在运行时更改执行程序的数量。
由于拓扑结构中有多个喷口和螺栓,所有喷口和螺栓都在不同的线程甚至不同的机器上执行,因此这里有任务并行性(不要与Storm&混淆#39;使用术语任务!)。由于spout / bolt之间存在生产/消费者关系,因此您还可以获得管道并行性,这是一种特殊形式的任务并行性。 Storm中另一种形式的任务并行性是能够同时运行多个拓扑。