Auto-‑Parallelizing ¡Stateful ¡ Distributed ¡Streaming ¡Applica9ons ¡
Sco$ ¡Schneider*, ¡Mar9n ¡Hirzel*, ¡ Bugra ¡Gedik+ ¡and ¡Kun-‑Lung ¡Wu* ¡
*IBM ¡Research ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+Bilkent ¡University ¡
1
Auto-Parallelizing Stateful Distributed Streaming Applica9ons - - PowerPoint PPT Presentation
Auto-Parallelizing Stateful Distributed Streaming Applica9ons Sco$ Schneider * , Mar9n Hirzel * , Bugra Gedik + and Kun-Lung Wu * * IBM Research
*IBM ¡Research ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡+Bilkent ¡University ¡
1
2 ¡
3 ¡
– e.g., ¡1 ¡: ¡3 ¡
for i in range(3): result = f(i) submit(result)
– In ¡general, ¡m ¡: ¡n ¡where ¡m ¡and ¡ n ¡are ¡sta9cally ¡known ¡
– e.g., ¡1 ¡: ¡[0,1] ¡
if input.value > 5: submit(result)
– In ¡general, ¡1 ¡: ¡* ¡ ¡
4 ¡
5
SPL source
x86 host x86 host x86 host x86 host x86 host
PE PE PE PE PE PE PE PE
Connections
Source Sink PE
SPL compiler Streams Runtime
6
x86 host x86 host x86 host x86 host x86 host
PE PE Sink Source Source PE PE PE PE Sink Sink PE PE PE PE PE PE PE PE
Connections
Source Sink PE
SPL compiler Streams Runtime
(Job management, Security, Continuous Resource Management)
composite Main { type Entry = int32 uid, rstring server, rstring msg; Sum = uint32 uid, int32 total; graph stream<Entry> Msgs = ParSource() { param servers: "logs.*.com"; partitionBy: server; } stream<Sum> Sums = Aggregate(Msgs) { window Msgs: tumbling, time(5), partitioned; param partitionBy: uid; } stream<Sum> Suspects = Filter(Sums) { param filter: total > 100; } () as Sink = FileSink(Suspects) { param file: "suspects.csv"; } } 7 ¡
ParSrc Aggr Filter Sink ParSrc Aggr Filter ParSrc Aggr Filter Sink ParSrc Aggr Filter
8 ¡
Parallelize ¡ non-‑source/sink ¡ Parallelize ¡sources ¡ and ¡sinks ¡ Combine ¡parallel ¡ regions ¡ Rotate ¡ merge ¡and ¡split ¡
par99oned ¡state ¡
par99oned ¡state ¡
¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡or ¡
keys ¡
9
10 ¡
n.p.
k
k,l
l
l
n.p.
k
11 ¡
Compiler ¡ Graph ¡+ ¡unexpanded ¡ parallel ¡regions ¡ ¡ Fully ¡expanded ¡ ¡ graph ¡ Run9me ¡ graph ¡ fragment ¡ Run9me ¡ graph ¡ fragment ¡ Run9me ¡ graph ¡ fragment ¡ PE ¡ PE ¡ PE ¡ compile-time submission-time run-time
selec:vity ¡= ¡1 ¡ selec:vity ¡≤ ¡1 ¡ selec:vity ¡unknown ¡ no ¡state ¡ round-‑robin ¡ seqnos ¡& ¡pulses ¡ don't ¡parallelize ¡ par::oned ¡state ¡ seqnos ¡ seqnos ¡& ¡pulses ¡ don't ¡parallelize ¡ unknown ¡state ¡ don't ¡parallelize ¡ don't ¡parallelize ¡ don't ¡parallelize ¡
12
Split: ¡
Merge: ¡
policy ¡
there) ¡and ¡drop ¡ pulse ¡(if ¡there) ¡ Operators ¡in ¡parallel ¡segments: ¡
13 ¡ next ¡
1 2
Round-‑Robin ¡
next-‑heap ¡
1 2 7 10 13 6 9 12 15
last ¡= ¡4 ¡
5
Sequence ¡Numbers ¡
next-‑heap ¡ seen-‑heap ¡
1 2 10 16 22 6 12 18 24
last ¡= ¡4 ¡
8
Sequence ¡Numbers ¡and ¡Pulses ¡
14 ¡
Aggr Src Aggr Aggr Sink SplitMergeStateful ¡ Aggr Aggr Src Aggr Aggr Aggr Aggr Sink SplitShuffleMerge ¡
15 ¡
21.1 14.4 12.8 11.4 3.2 2 4 6 8 10 12 14 16 18 20 22 1 2 4 8 16 32 Speedup vs. 1 channel Number of parallel channels Network monitoring PageRank Twitter NLP Twitter CEP Finance
Parse Match
Twitter CEP
≤1 NLP
Twitter NLP
≤1 MulAdd Add Chop While Sink Init
PageRank
≤1 ParSrc Aggr Filter Aggr Filter ParSink
Network monitoring
≤1 ≤1 ≤1 ≤1 Vwap Project Combine Bargains Trades Quotes
Finance
16
17
18 ¡
Select ¡parallel ¡ segments ¡ Operator ¡ model ¡ Write ¡ADL ¡ Fuse ¡ Analyze ¡SPL ¡ code ¡ Segments ¡ Par99ons ¡ Infer ¡par99on ¡ coloca9on ¡
20 ¡
21 ¡
22 ¡
Aggr Aggr Src Aggr Aggr Aggr Aggr Sink