风暴 - 为同一台机器分组?

时间:2016-02-01 13:47:16

标签: apache-storm

  1. 我使用fields grouping风暴。
  2. 问题是因为我有多台机器和多个螺栓(显然),然后tuple在机器之间移动,我怀疑这会大大降低我的性能。
  3. 特定字段分组结果是否可能特定于特定计算机?
  4. 或者有关字段分组的更多详细信息account1要粘贴machine1 account2 machine3 account3 machine1所有螺栓都要粘account每个bolt使{1}}等所有螺栓都在特定的机器上运行?
  5. 请注意,一旦第一个accountid处理该事件,它就会在其输出元组中发出bolts所有accountid从该点开始,并且field grouping意味着我想要从accountid开始bolts topology select G.Name , count(*) from enduser EU, prescription P,prescriptiongame PG , games G ,session S ,entries E where P.EndUserRefID = 889 and E.action='correctAnswer' and (EU.UserRefID = P.EndUserRefID) and (PG.PrescriptionRefID = P.PrescriptionID) and (G.GameID = PG.GameRefID) and (S.PrescriptionRefID = P.PrescriptionID) and (E.SessionGameRefID = S.Session) GROUP BY G.Name ORDER BY G.Name #!/usr/bin/env perl my $number1 = 2.198696207; my $number2 = 2.134326286; my $diff = $number1 - $number2; print STDOUT "\n 2.198696207 - 2.134326286: $diff\n"; $number1 = 0.449262271; $number2 = 0.401361096; $diff = $number1 - $number2; print STDOUT "\n 2.198696207 - 2.134326286: $diff\n"; 。 (在看到第一个答案后加入澄清)

2 个答案:

答案 0 :(得分:1)

假设你有3个生产商P1,P2,P3和三个消费者C1,C2,C3和3台机器,每台机器都有一个生产者 - 消费者对,即P1-C1。此外,假设您有3个不同的键值a,b,c。此外,假设C1使用键a处理所有元组。

通常,具有键a的元组可以由所有三个生成器发出。此外,P1还可以使用键bc发出元组。因此,您无法使用字段分组将数据传输限制到本地计算机,只需对所有数据进行重新分区即可。

<强>扩展

如果你有额外的螺栓B1到B3消耗从C1到C3的数据,那些使用相同的字段分组键作为C1到C3(即Bx可以利用已经给定的Cx分区),你需要确保B1到B3共同位于与C1到C3相同的机器上,避免重新分区。可以通过为Storm提供自定义调度程序来实现协同定位。请参阅此处以获取示例:WebDriver click() vs JavaScript click()

但是,您无法使用字段分组来连接B1-&gt; C1等,因为字段分组与运营商协同定位和已经给定的分区数据无关(它只会重新再次分区数据)。相反,您需要使用直接或自定义分组来确保B1中的所有数据都被发送到C1等。

答案 1 :(得分:1)