http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/dev/windows.md ---------------------------------------------------------------------- diff --git a/docs/dev/windows.md b/docs/dev/windows.md new file mode 100644 index 0000000..084a2ee --- /dev/null +++ b/docs/dev/windows.md @@ -0,0 +1,677 @@ +--- +title: "Windows" +nav-parent_id: dev +nav-id: windows +nav-pos: 3 +--- +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +Flink uses a concept called *windows* to divide a (potentially) infinite `DataStream` into finite +slices based on the timestamps of elements or other criteria. This division is required when working +with infinite streams of data and performing transformations that aggregate elements. + +<span class="label label-info">Info</span> We will mostly talk about *keyed windowing* here, i.e. +windows that are applied on a `KeyedStream`. Keyed windows have the advantage that elements are +subdivided based on both window and key before being given to +a user function. The work can thus be distributed across the cluster +because the elements for different keys can be processed independently. If you absolutely have to, +you can check out [non-keyed windowing](#non-keyed-windowing) where we describe how non-keyed +windows work. + +* This will be replaced by the TOC +{:toc} + +## Basics + +For a windowed transformation you must at least specify a *key* +(see [specifying keys]({{ site.baseurl }}/dev/api_concepts.html#specifying-keys)), +a *window assigner* and a *window function*. The *key* divides the infinite, non-keyed, stream +into logical keyed streams while the *window assigner* assigns elements to finite per-key windows. +Finally, the *window function* is used to process the elements of each window. + +The basic structure of a windowed transformation is thus as follows: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .<windowed transformation>(<window function>) +{% endhighlight %} +</div> +</div> + +We will cover [window assigners](#window-assigners) in a separate section below. + +The window transformation can be one of `reduce()`, `fold()` or `apply()`. Which respectively +takes a `ReduceFunction`, `FoldFunction` or `WindowFunction`. We describe each of these ways +of specifying a windowed transformation in detail below: [window functions](#window-functions). + +For more advanced use cases you can also specify a `Trigger` that determines when exactly a window +is being considered as *ready for processing*. These will be covered in more detail in +[triggers](#triggers). + +## Window Assigners + +The window assigner specifies how elements of the stream are divided into finite slices. Flink comes +with pre-implemented window assigners for the most typical use cases, namely *tumbling windows*, +*sliding windows*, *session windows* and *global windows*, but you can implement your own by +extending the `WindowAssigner` class. All the built-in window assigners, except for the global +windows one, assign elements to windows based on time, which can either be processing time or event +time. Please take a look at our section on [event time]({{ site.baseurl }}/dev/event_time.html) for more +information about how Flink deals with time. + +Let's first look at how each of these window assigners works before looking at how they can be used +in a Flink program. We will be using abstract figures to visualize the workings of each assigner: +in the following, the purple circles are elements of the stream, they are partitioned +by some key (in this case *user 1*, *user 2* and *user 3*) and the x-axis shows the progress +of time. + +### Global Windows + +Global windows are a way of specifying that we don't want to subdivide our elements into windows. +Each element is assigned to one single per-key *global window*. +This windowing scheme is only useful if you also specify a custom [trigger](#triggers). Otherwise, +no computation is ever going to be performed, as the global window does not have a natural end at +which we could process the aggregated elements. + +<img src="{{ site.baseurl }}/fig/non-windowed.svg" class="center" style="width: 80%;" /> + +### Tumbling Windows + +A *tumbling windows* assigner assigns elements to fixed length, non-overlapping windows of a +specified *window size*.. For example, if you specify a window size of 5 minutes, the window +function will get 5 minutes worth of elements in each invocation. + +<img src="{{ site.baseurl }}/fig/tumbling-windows.svg" class="center" style="width: 80%;" /> + +### Sliding Windows + +The *sliding windows* assigner assigns elements to windows of fixed length equal to *window size*, +as the tumbling windows assigner, but in this case, windows can be overlapping. The size of the +overlap is defined by the user-specified parameter *window slide*. As windows are overlapping, an +element can be assigned to multiple windows + +For example, you could have windows of size 10 minutes that slide by 5 minutes. With this you get 10 +minutes worth of elements in each invocation of the window function and it will be invoked for every +5 minutes of data. + +<img src="{{ site.baseurl }}/fig/sliding-windows.svg" class="center" style="width: 80%;" /> + +### Session Windows + +The *session windows* assigner is ideal for cases where the window boundaries need to adjust to the +incoming data. Both the *tumbling windows* and *sliding windows* assigner assign elements to windows +that start at fixed time points and have a fixed *window size*. With session windows it is possible +to have windows that start at individual points in time for each key and that end once there has +been a certain period of inactivity. The configuration parameter is the *session gap* that specifies +how long to wait for new data before considering a session as closed. + +<img src="{{ site.baseurl }}/fig/session-windows.svg" class="center" style="width: 80%;" /> + +### Specifying a Window Assigner + +The built-in window assigners (except `GlobalWindows`) come in two versions. One for processing-time +windowing and one for event-time windowing. The processing-time assigners assign elements to +windows based on the current clock of the worker machines while the event-time assigners assign +windows based on the timestamps of elements. Please have a look at +[event time]({{ site.baseurl }}/dev/event_time.html) to learn about the difference between processing time +and event time and about how timestamps can be assigned to elements. + +The following code snippets show how each of the window assigners can be used in a program: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +// tumbling event-time windows +input + .keyBy(<key selector>) + .window(TumblingEventTimeWindows.of(Time.seconds(5))) + .<windowed transformation>(<window function>); + +// sliding event-time windows +input + .keyBy(<key selector>) + .window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5))) + .<windowed transformation>(<window function>); + +// event-time session windows +input + .keyBy(<key selector>) + .window(EventTimeSessionWindows.withGap(Time.minutes(10))) + .<windowed transformation>(<window function>); + +// tumbling processing-time windows +input + .keyBy(<key selector>) + .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) + .<windowed transformation>(<window function>); + +// sliding processing-time windows +input + .keyBy(<key selector>) + .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) + .<windowed transformation>(<window function>); + +// processing-time session windows +input + .keyBy(<key selector>) + .window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))) + .<windowed transformation>(<window function>); + +// global windows +input + .keyBy(<key selector>) + .window(GlobalWindows.create()) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +// tumbling event-time windows +input + .keyBy(<key selector>) + .window(TumblingEventTimeWindows.of(Time.seconds(5))) + .<windowed transformation>(<window function>) + +// sliding event-time windows +input + .keyBy(<key selector>) + .window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5))) + .<windowed transformation>(<window function>) + +// event-time session windows +input + .keyBy(<key selector>) + .window(EventTimeSessionWindows.withGap(Time.minutes(10))) + .<windowed transformation>(<window function>) + +// tumbling processing-time windows +input + .keyBy(<key selector>) + .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) + .<windowed transformation>(<window function>) + +// sliding processing-time windows +input + .keyBy(<key selector>) + .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) + .<windowed transformation>(<window function>) + +// processing-time session windows +input + .keyBy(<key selector>) + .window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))) + .<windowed transformation>(<window function>) + +// global windows +input + .keyBy(<key selector>) + .window(GlobalWindows.create()) +{% endhighlight %} +</div> +</div> + +Note, how we can specify a time interval by using one of `Time.milliseconds(x)`, `Time.seconds(x)`, +`Time.minutes(x)`, and so on. + +The time-based window assigners also take an optional `offset` parameter that can be used to +change the alignment of windows. For example, without offsets hourly windows are aligned +with epoch, that is you will get windows such as `1:00 - 1:59`, `2:00 - 2:59` and so on. If you +want to change that you can give an offset. With an offset of 15 minutes you would, for example, +get `1:15 - 2:14`, `2:15 - 3:14` etc. Another important use case for offsets is when you +want to have daily windows and live in a timezone other than UTC-0. For example, in China +you would have to specify an offset of `Time.hours(-8)`. + +This example shows how an offset can be specified for tumbling event time windows (the other +windows work accordingly): +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +// tumbling event-time windows +input + .keyBy(<key selector>) + .window(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8))) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +// tumbling event-time windows +input + .keyBy(<key selector>) + .window(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8))) + .<windowed transformation>(<window function>) +{% endhighlight %} +</div> +</div> + +## Window Functions + +The *window function* is used to process the elements of each window (and key) once the system +determines that a window is ready for processing (see [triggers](#triggers) for how the system +determines when a window is ready). + +The window function can be one of `ReduceFunction`, `FoldFunction` or `WindowFunction`. The first +two can be executed more efficiently because Flink can incrementally aggregate the elements for each +window as they arrive. A `WindowFunction` gets an `Iterable` for all the elements contained in a +window and additional meta information about the window to which the elements belong. + +A windowed transformation with a `WindowFunction` cannot be executed as efficiently as the other +cases because Flink has to buffer *all* elements for a window internally before invoking the function. +This can be mitigated by combining a `WindowFunction` with a `ReduceFunction` or `FoldFunction` to +get both incremental aggregation of window elements and the additional information that the +`WindowFunction` receives. We will look at examples for each of these variants. + +### ReduceFunction + +A reduce function specifies how two values can be combined to form one element. Flink can use this +to incrementally aggregate the elements in a window. + +A `ReduceFunction` can be used in a program like this: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<Tuple2<String, Long>> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .reduce(new ReduceFunction<Tuple2<String, Long>> { + public Tuple2<String, Long> reduce(Tuple2<String, Long> v1, Tuple2<String, Long> v2) { + return new Tuple2<>(v1.f0, v1.f1 + v2.f1); + } + }); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[(String, Long)] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .reduce { (v1, v2) => (v1._1, v1._2 + v2._2) } +{% endhighlight %} +</div> +</div> + +A `ReduceFunction` specifies how two elements from the input can be combined to produce +an output element. This example will sum up the second field of the tuple for all elements +in a window. + +### FoldFunction + +A fold function can be specified like this: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<Tuple2<String, Long>> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .fold("", new FoldFunction<Tuple2<String, Long>, String>> { + public String fold(String acc, Tuple2<String, Long> value) { + return acc + value.f1; + } + }); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[(String, Long)] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .fold("") { (acc, v) => acc + v._2 } +{% endhighlight %} +</div> +</div> + +A `FoldFunction` specifies how elements from the input will be added to an initial +accumulator value (`""`, the empty string, in our example). This example will compute +a concatenation of all the `Long` fields of the input. + +### WindowFunction - The Generic Case + +Using a `WindowFunction` provides most flexibility, at the cost of performance. The reason for this +is that elements cannot be incrementally aggregated for a window and instead need to be buffered +internally until the window is considered ready for processing. A `WindowFunction` gets an +`Iterable` containing all the elements of the window being processed. The signature of +`WindowFunction` is this: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +public interface WindowFunction<IN, OUT, KEY, W extends Window> extends Function, Serializable { + + /** + * Evaluates the window and outputs none or several elements. + * + * @param key The key for which this window is evaluated. + * @param window The window that is being evaluated. + * @param input The elements in the window being evaluated. + * @param out A collector for emitting elements. + * + * @throws Exception The function may throw exceptions to fail the program and trigger recovery. + */ + void apply(KEY key, W window, Iterable<IN> input, Collector<OUT> out) throws Exception; +} +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +public interface WindowFunction<IN, OUT, KEY, W extends Window> extends Function, Serializable { + + /** + * Evaluates the window and outputs none or several elements. + * + * @param key The key for which this window is evaluated. + * @param window The window that is being evaluated. + * @param input The elements in the window being evaluated. + * @param out A collector for emitting elements. + * + * @throws Exception The function may throw exceptions to fail the program and trigger recovery. + */ + void apply(KEY key, W window, Iterable<IN> input, Collector<OUT> out) throws Exception; +} +{% endhighlight %} +</div> +</div> + +Here we show an example that uses a `WindowFunction` to count the elements in a window. We do this +because we want to access information about the window itself to emit it along with the count. +This is very inefficient, however, and should be implemented with a +`ReduceFunction` in practice. Below, we will see an example of how a `ReduceFunction` can +be combined with a `WindowFunction` to get both incremental aggregation and the added +information of a `WindowFunction`. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<Tuple2<String, Long>> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(new MyWindowFunction()); + +/* ... */ + +public class MyWindowFunction implements WindowFunction<Tuple<String, Long>, String, String, TimeWindow> { + + void apply(String key, TimeWindow window, Iterable<Tuple<String, Long>> input, Collector<String> out) { + long count = 0; + for (Tuple<String, Long> in: input) { + count++; + } + out.collect("Window: " + window + "count: " + count); + } +} + +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[(String, Long)] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(new MyWindowFunction()) + +/* ... */ + +class MyWindowFunction extends WindowFunction[(String, Long), String, String, TimeWindow] { + + def apply(key: String, window: TimeWindow, input: Iterable[(String, Long)], out: Collector[String]): () = { + var count = 0L + for (in <- input) { + count = count + 1 + } + out.collect(s"Window $window count: $count") + } +} +{% endhighlight %} +</div> +</div> + +### WindowFunction with Incremental Aggregation + +A `WindowFunction` can be combined with either a `ReduceFunction` or a `FoldFunction`. When doing +this, the `ReduceFunction`/`FoldFunction` will be used to incrementally aggregate elements as they +arrive while the `WindowFunction` will be provided with the aggregated result when the window is +ready for processing. This allows to get the benefit of incremental window computation and also have +the additional meta information that writing a `WindowFunction` provides. + +This is an example that shows how incremental aggregation functions can be combined with +a `WindowFunction`. + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<Tuple2<String, Long>> input = ...; + +// for folding incremental computation +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(<initial value>, new MyFoldFunction(), new MyWindowFunction()); + +// for reducing incremental computation +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(new MyReduceFunction(), new MyWindowFunction()); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[(String, Long)] = ... + +// for folding incremental computation +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(<initial value>, new MyFoldFunction(), new MyWindowFunction()) + +// for reducing incremental computation +input + .keyBy(<key selector>) + .window(<window assigner>) + .apply(new MyReduceFunction(), new MyWindowFunction()) +{% endhighlight %} +</div> +</div> + +## Dealing with Late Data + +When working with event-time windowing it can happen that elements arrive late, i.e the +watermark that Flink uses to keep track of the progress of event-time is already past the +end timestamp of a window to which an element belongs. Please +see [event time](/apis/streaming/event_time.html) and especially +[late elements](/apis/streaming/event_time.html#late-elements) for a more thorough discussion of +how Flink deals with event time. + +You can specify how a windowed transformation should deal with late elements and how much lateness +is allowed. The parameter for this is called *allowed lateness*. This specifies by how much time +elements can be late. Elements that arrive within the allowed lateness are still put into windows +and are considered when computing window results. If elements arrive after the allowed lateness they +will be dropped. Flink will also make sure that any state held by the windowing operation is garbage +collected once the watermark passes the end of a window plus the allowed lateness. + +<span class="label label-info">Default</span> By default, the allowed lateness is set to +`0`. That is, elements that arrive behind the watermark will be dropped. + +You can specify an allowed lateness like this: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .allowedLateness(<time>) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .allowedLateness(<time>) + .<windowed transformation>(<window function>) +{% endhighlight %} +</div> +</div> + +<span class="label label-info">Note</span> When using the `GlobalWindows` window assigner no +data is ever considered late because the end timestamp of the global window is `Long.MAX_VALUE`. + +## Triggers + +A `Trigger` determines when a window (as assigned by the `WindowAssigner`) is ready for being +processed by the *window function*. The trigger observes how elements are added to windows +and can also keep track of the progress of processing time and event time. Once a trigger +determines that a window is ready for processing, it fires. This is the signal for the +window operation to take the elements that are currently in the window and pass them along to +the window function to produce output for the firing window. + +Each `WindowAssigner` (except `GlobalWindows`) comes with a default trigger that should be +appropriate for most use cases. For example, `TumblingEventTimeWindows` has an `EventTimeTrigger` as +default trigger. This trigger simply fires once the watermark passes the end of a window. + +You can specify the trigger to be used by calling `trigger()` with a given `Trigger`. The +whole specification of the windowed transformation would then look like this: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +input + .keyBy(<key selector>) + .window(<window assigner>) + .trigger(<trigger>) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +input + .keyBy(<key selector>) + .window(<window assigner>) + .trigger(<trigger>) + .<windowed transformation>(<window function>) +{% endhighlight %} +</div> +</div> + +Flink comes with a few triggers out-of-box: there is the already mentioned `EventTimeTrigger` that +fires based on the progress of event-time as measured by the watermark, the `ProcessingTimeTrigger` +does the same but based on processing time and the `CountTrigger` fires once the number of elements +in a window exceeds the given limit. + +<span class="label label-danger">Attention</span> By specifying a trigger using `trigger()` you +are overwriting the default trigger of a `WindowAssigner`. For example, if you specify a +`CountTrigger` for `TumblingEventTimeWindows` you will no longer get window firings based on the +progress of time but only by count. Right now, you have to write your own custom trigger if +you want to react based on both time and count. + +The internal `Trigger` API is still considered experimental but you can check out the code +if you want to write your own custom trigger: +{% gh_link /flink-streaming-java/src/main/java/org/apache/flink/streaming/api/windowing/triggers/Trigger.java "Trigger.java" %}. + +## Non-keyed Windowing + +You can also leave out the `keyBy()` when specifying a windowed transformation. This means, however, +that Flink cannot process windows for different keys in parallel, essentially turning the +transformation into a non-parallel operation. + +<span class="label label-danger">Warning</span> As mentioned in the introduction, non-keyed +windows have the disadvantage that work cannot be distributed in the cluster because +windows cannot be computed independently per key. This can have severe performance implications. + + +The basic structure of a non-keyed windowed transformation is as follows: + +<div class="codetabs" markdown="1"> +<div data-lang="java" markdown="1"> +{% highlight java %} +DataStream<T> input = ...; + +input + .windowAll(<window assigner>) + .<windowed transformation>(<window function>); +{% endhighlight %} +</div> + +<div data-lang="scala" markdown="1"> +{% highlight scala %} +val input: DataStream[T] = ... + +input + .windowAll(<window assigner>) + .<windowed transformation>(<window function>) +{% endhighlight %} +</div> +</div>
http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/ClientJmTm.svg ---------------------------------------------------------------------- diff --git a/docs/fig/ClientJmTm.svg b/docs/fig/ClientJmTm.svg new file mode 100644 index 0000000..b158b7d --- /dev/null +++ b/docs/fig/ClientJmTm.svg @@ -0,0 +1,348 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="817.49274" + height="463.47787" + id="svg2" + version="1.1" + inkscape:version="0.48.5 r10040"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.7" + inkscape:cx="118.68649" + inkscape:cy="265.49231" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-width="1600" + inkscape:window-height="838" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0.17493185,-2.7660971)"> + <g + id="g2989" + transform="translate(-24.016809,-116.88402)"> + <path + id="path2991" + d="m 400.33723,121.08016 0,124.38099 248.19934,0 0,-124.38099 -248.19934,0 z" + style="fill:#f2dcdb;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path2993" + d="m 400.33723,121.08016 248.19934,0 0,124.38099 -248.19934,0 z" + style="fill:none;stroke:#000000;stroke-width:2.51312613px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <text + id="text2995" + style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="162.61018" + x="447.93558" + xml:space="preserve">JobManager</text> + <path + id="path2997" + d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z" + style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path2999" + d="m 40.510092,137.88435 164.103378,0 0,37.75316 163.46573,0 0,-12.58439 25.16877,25.16877 -25.16877,25.16877 0,-12.58438 -163.46573,0 0,37.75315 -164.103378,0 z" + style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3001" + d="m 55.288774,144.86109 0,36.45908 132.483006,0 0,-36.45908 -132.483006,0 z" + style="fill:#b9cde5;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <text + id="text3003" + style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="171.84125" + x="85.103935" + xml:space="preserve">Client</text> + <path + id="path3005" + d="m 24.46547,120.27371 42.507465,0 0,42.46058 -7.079889,7.07989 -35.427576,0 z" + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path3007" + d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 z" + style="fill:#cdcdcd;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path3009" + d="m 59.893046,169.81418 1.415978,-5.66391 5.663911,-1.41598 -7.079889,7.07989 -35.427576,0 0,-49.54047 42.507465,0 0,42.46058" + style="fill:none;stroke:#000000;stroke-width:1.24718571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3011" + d="m 29.78242,124.80297 26.584747,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3013" + d="m 29.78242,129.18218 31.901697,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3015" + d="m 29.78242,133.71144 21.267798,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3017" + d="m 29.78242,138.24069 31.901697,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3019" + d="m 29.78242,142.77932 31.901697,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3021" + d="m 29.78242,147.30857 13.287685,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3023" + d="m 29.78242,151.83783 26.556615,0" + style="fill:none;stroke:#000000;stroke-width:1.87546718px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <text + id="text3025" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="229.55898" + x="239.21106" + xml:space="preserve">Submit Job</text> + <text + id="text3027" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="206.73724" + x="78.214714" + xml:space="preserve">Compiler/</text> + <text + id="text3029" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="227.74248" + x="78.814865" + xml:space="preserve">Optimizer</text> + <text + id="text3031" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="206.94733" + x="473.13199" + xml:space="preserve">Scheduling,</text> + <text + id="text3033" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="227.95258" + x="424.21982" + xml:space="preserve">Resource Management</text> + <path + id="path3035" + d="m 591.89746,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z" + style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path3037" + d="m 591.89746,422.65529 248.16182,0 0,124.38099 -248.16182,0 z" + style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3039" + d="m 621.82991,437.28394 0,36.30904 187.99684,0 0,-36.30904 -187.99684,0 z" + style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <text + id="text3041" + style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="464.15421" + x="631.76624" + xml:space="preserve">TaskManager</text> + <path + id="path3043" + d="m 177.34418,422.65529 0,124.38099 248.16182,0 0,-124.38099 -248.16182,0 z" + style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path3045" + d="m 177.34418,422.65529 248.16182,0 0,124.38099 -248.16182,0 z" + style="fill:none;stroke:#000000;stroke-width:2.55063534px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3047" + d="m 207.42668,437.28394 0,36.30904 187.84679,0 0,-36.30904 -187.84679,0 z" + style="fill:#d7e4bd;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" /> + <text + id="text3049" + style="font-size:22.5056076px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="464.15421" + x="217.23552" + xml:space="preserve">TaskManager</text> + <path + id="path3051" + d="m 416.89761,258.47689 -147.58052,146.38022 3.95724,3.99475 147.58052,-146.38022 z m -143.26694,128.76958 -6.30157,23.53712 23.59338,-6.11403 c 1.50037,-0.37509 2.40059,-1.91297 2.0255,-3.41335 -0.39385,-1.51913 -1.93173,-2.41935 -3.4321,-2.0255 l -18.92347,4.89497 3.43211,3.45086 5.045,-18.8672 c 0.39385,-1.51913 -0.48762,-3.05701 -1.98799,-3.45086 -1.50038,-0.41261 -3.05701,0.48762 -3.45086,1.98799 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3053" + d="m 612.90269,257.57667 140.0974,144.26094 -4.05101,3.93848 -140.0974,-144.26094 z m 136.12141,126.59404 5.85146,23.63088 -23.48085,-6.52662 c -1.50038,-0.45011 -2.36309,-1.988 -1.95049,-3.48837 0.41261,-1.50038 1.95049,-2.36309 3.45086,-1.95049 l 18.82969,5.25131 -3.48837,3.37584 -4.68866,-18.94222 c -0.3751,-1.53788 0.56264,-3.03825 2.06301,-3.41335 1.50037,-0.37509 3.03826,0.52513 3.41335,2.06302 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3055" + d="m 320.29229,409.69582 134.95862,-137.19043 -4.0135,-3.93848 -134.93986,137.19042 z m 130.85135,-119.52353 6.0015,-23.61213 -23.49961,6.39534 c -1.50037,0.39385 -2.38184,1.95049 -1.96924,3.45086 0.39385,1.50037 1.95049,2.38184 3.45086,1.96924 l 18.84845,-5.12003 -3.46962,-3.41335 -4.80119,18.94222 c -0.39385,1.50038 0.52513,3.03826 2.0255,3.41335 1.50037,0.3751 3.03826,-0.52513 3.41335,-2.0255 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3057" + d="m 713.84034,414.29071 -141.48525,-148.76206 4.08852,-3.90097 141.48524,148.79957 z m -137.69681,-131.05765 -5.58889,-23.70591 23.40583,6.7892 c 1.46286,0.45011 2.32558,1.98799 1.91298,3.48837 -0.45012,1.50037 -1.988,2.36308 -3.48837,1.91297 l -18.79218,-5.43885 3.52587,-3.33833 4.50113,19.01723 c 0.37509,1.50038 -0.56264,3.00075 -2.10053,3.37584 -1.50037,0.33759 -3.00074,-0.60015 -3.37584,-2.10052 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <path + id="path3059" + d="m 294.48586,342.57284 c 0.95649,1.01276 1.61291,2.21305 1.95049,3.6009 0.35634,1.38785 0.31883,2.75694 -0.11253,4.08852 -0.26256,0.8252 -0.63766,1.53788 -1.10652,2.1943 -0.48763,0.63765 -1.08777,1.29407 -1.80045,1.98799 l -2.49437,2.38184 -6.67667,-11.27155 2.15679,-2.04426 c 0.67517,-0.63766 1.33158,-1.18155 1.96924,-1.6129 0.63766,-0.43136 1.33158,-0.71268 2.08177,-0.84396 0.73143,-0.13129 1.42535,-0.0563 2.10052,0.18754 0.69393,0.26257 1.33158,0.69392 1.93173,1.33158 z m -1.2003,1.33159 c -0.45011,-0.46887 -0.91897,-0.7877 -1.4066,-0.97525 -0.50637,-0.18754 -1.01275,-0.22505 -1.57539,-0.13128 -0.54388,0.0938 -1.05026,0.28132 -1.50037,0.58139 -0.46887,0.28132 -0.97524,0.69393 -1.55664,1.25657 l -1.03151,0.97524 5.19505,8.8147 1.29407,-1.21906 c 0.58139,-0.56264 1.06902,-1.12528 1.44411,-1.66916 0.37509,-0.52513 0.65641,-1.12528 0.84396,-1.74419 0.30007,-1.01275 0.28132,-2.04426 -0.0563,-3.09452 -0.33759,-1.05026 -0.88147,-1.98799 -1.65042,-2.79444 z m 8.90847,-5.87022 c -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.0938 -0.15003,-0.18755 -0.24381,-0.28132 -0.4126,-0.45011 -0.86271,-0.67517 -1.35033,-0.69392 -0.46887,-0.0188 -0.97525,0.22505 -1.51913,0.73143 -0.5814,0.56264 -0.93774,1.23781 -1.05026,2.04426 -0.0938,0.78769 0.0563,1.55664 0.45011,2.30682 z m 1.85672,6.60165 c -0.97525,0.91898 -1.93173,1.4066 -2.90698,1.48162 -0.97524,0.075 -1.87546,-0.33759 -2.70067,-1.2003 -1.21905,-1.27532 -1.85671,-2.73818 -1.91298,-4.42611 -0.0563,-1.66916 0.50638,-3.05701 1.68792,-4.18229 0.7877,-0.75018 1.5754,-1.12528 2.36309,-1.14403 0.7877,0 1.51913,0.35634 2.1943,1.06901 0.11253,0.11253 0.28132,0.33759 0.50638,0.63766 0.22505,0.30008 0.45011,0.65642 0.71267,1.08777 l -5.10127,4.87622 c 0.0938,0.13128 0.18755,0.26256 0.28132,0.39385 0.0938,0.13128 0.18755,0.24381 0.28132,0.33758 0.56264,0.5814 1.18155,0.88147 1.85671,0.86272 0.67517,0 1.33159,-0.31883 1.988,-0.93774 0.45011,-0.43136 0.84396,-0.95649 1.14403,-1.59414 0.31883,-0.63766 0.525 14,-1.23781 0.63766,-1.76294 l 0.075,-0.075 0.95649,1.51913 c -0.15004,0.26256 -0.26256,0.50637 -0.37509,0.73143 -0.11253,0.22505 -0.26257,0.48762 -0.45011,0.78769 -0.20631,0.30008 -0.3751,0.56264 -0.54389,0.7877 -0.16879,0.22506 -0.4126,0.46887 -0.69392,0.75019 z m 6.69541,-15.71642 c 0.65642,0.67517 1.16279,1.42536 1.51913,2.23181 0.3751,0.80645 0.5814,1.59415 0.61891,2.34433 0.0563,0.7877 -0.0188,1.51913 -0.26257,2.21305 -0.22505,0.71268 -0.6189,1.31283 -1.14403,1.81921 -0.3751,0.35634 -0.75019,0.63766 -1.14404,0.84396 -0.39385,0.2063 -0.80645,0.35634 -1.21905,0.45011 l 2.11928,3.56339 -1.18155,1.10652 -6.8267,-11.59039 1.16279,-1.10652 0.52513,0.88147 c 0.13128,-0.63766 0.30008,-1.21905 0.50638,-1.74419 0.2063,-0.52513 0.54388,-0.99399 0.994,-1.42535 0.67516,-0.63766 1.38784,-0.91898 2.13803,-0.84396 0.75018,0.075 1.48162,0.50638 2.19429,1.25656 z m -1.01275,1.38785 c -0.46886,-0.48762 -0.93773,-0.76894 -1.4066,-0.84396 -0.46886,-0.0563 -0.93773,0.13128 -1.4066,0.58139 -0.33758, 0.33759 -0.6189,0.75019 -0.8252,1.27532 -0.20631,0.52513 -0.35634,1.03151 -0.48763,1.55664 l 2.83196,4.80119 c 0.4126,-0.11252 0.76894,-0.24381 1.08777,-0.4126 0.30008,-0.16879 0.63766,-0.4126 0.994,-0.73143 0.4126,-0.4126 0.71268,-0.88147 0.84396,-1.4066 0.15004,-0.54389 0.16879,-1.06902 0.075,-1.6129 -0.0938,-0.5814 -0.28132,-1.14404 -0.56264,-1.66917 -0.30008,-0.54388 -0.67517,-1.05026 -1.14404,-1.53788 z m 0.63766,-10.39009 6.95798,11.77793 -1.16279,1.10653 -6.95798,-11.77793 z m 11.81544,-1.38785 c 0.5814,0.63766 1.05027,1.31283 1.40661,2.06302 0.35633,0.75018 0.56264,1.51913 0.6189,2.26931 0.0563,0.76894 -0.0375,1.51913 -0.28132,2.21305 -0.22506,0.69393 -0.65641,1.33159 -1.29407,1.93174 -0.82521,0.78769 -1.68792,1.16279 -2.58815,1.14403 -0.91898,-0.0375 -1.76294,-0.46887 -2.55063,-1.29407 -0.60015,-0.61891 -1.06902,-1.31283 -1.4066,-2.04426 -0.35634,-0.75019 -0.56264,-1.50037 -0.61891,-2.28807 -0.0563,-0.75019 0.0375,-1.48162 0.30008,-2.21305 0.26256,-0.73143 0.69392,-1.36909 1.27531,-1.93173 0.80646,-0.76895 1.65042,-1.14404 2.56939,-1.12528 0.90023,0 1.76294,0.43135 2.56939,1.27531 z m 0.5814,4.44486 c -0.075,-0.54388 -0.28132,-1.10652 -0.5814,-1.65041 -0.28132,-0.54389 -0.65641,-1.05026 -1.12528,-1.53788 -0.54388,-0.5814 -1.10652,-0.88147 -1.66916,-0.91898 -0.56264,-0.0375 -1.08777,0.18754 -1.59415,0.65641 -0.4126,0.39385 -0.67517,0.82521 -0.80645,1.33158 -0.13128,0.48762 -0.16879,1.01276 -0.075,1.5754 0.0938,0.54388 0.28132,1.08777 0.5814,1.63165 0.30007,0.56264 0.65641,1.06902 1.10652,1.53789 0.54389,0.58139 1.10653,0.88146 1.66917,0.91897 0.58139,0.0563 1.10652,-0.16879 1.63165,-0.65641 0.39385,-0.37509 0.65642,-0.82521 0.80646,-1.31283 0.13128,-0.50637 0.15003,-1.0315 0.0563,-1.57539 z m 8.27081,0.56264 -1.29407,1.21905 -0.80645,-4.89496 -7.46436,-5.32633 1.2003,-1.14404 5.90772,4.23856 -1.59415,-8.32708 1.25656,-1.21905 z m 8.92722,-29.01348 -3.28206,3.13203 5.90772,10.015 -1.23781,1.18154 -5.92648,-10.01499 -3.28206,3.15078 -0.76895,-1.27531 7.8 3946,-7.46436 z m 8.66466,0.43136 c -0.6189,0.63766 -1.14403,1.21905 -1.57539,1.76294 -0.4126,0.54389 -0.73143,1.03151 -0.91898,1.48162 -0.2063,0.45011 -0.28132,0.88147 -0.24381,1.27532 0.0563,0.4126 0.24381,0.78769 0.5814,1.12528 0.28132,0.30007 0.60014,0.43135 0.95648,0.39385 0.33759,-0.0375 0.73144,-0.26257 1.16279,-0.65642 0.3751,-0.35634 0.67517,-0.80645 0.91898,-1.35033 0.22506,-0.54389 0.39385,-1.08778 0.50638,-1.65042 z m 2.10053,3.56339 c -0.0563,0.16879 -0.11253,0.4126 -0.18755,0.71268 -0.075,0.31883 -0.18755,0.60015 -0.30008,0.88147 -0.11252,0.30007 -0.28132,0.60015 -0.46886,0.90022 -0.2063,0.31883 -0.46887,0.63766 -0.82521,0.95649 -0.54388,0.52513 -1.14403,0.78769 -1.78169,0.80645 -0.65642,0 -1.23781,-0.26257 -1.72543,-0.76894 -0.52513,-0.56264 -0.84396,-1.14404 -0.95649,-1.74419 -0.11253,-0.60015 -0.0563,-1.25656 0.18755,-1.95048 0.24381,-0.67517 0.65641,-1.38785 1.2003,-2.11928 0.56264,-0.73143 1.25656,-1.51913 2.08176,-2.34434 -0.0938,-0.15003 -0.16879,-0.26256 -0.225 05,-0.37509 -0.0563,-0.0938 -0.13128,-0.18755 -0.22506,-0.28132 -0.18754,-0.2063 -0.37509,-0.31883 -0.58139,-0.37509 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0187 -0.2063,0.075 -0.43135,0.18755 -0.65641,0.33759 -0.2063,0.15003 -0.43136,0.33758 -0.67517,0.56264 -0.33758,0.33758 -0.69392,0.76894 -1.03151,1.31282 -0.33758,0.54389 -0.60014,1.01276 -0.78769,1.38785 l -0.0563,0.0563 -0.88147,-1.38784 c 0.1688,-0.28132 0.45012,-0.67517 0.84396,-1.18155 0.3751,-0.52513 0.76895,-0.97524 1.2003,-1.36909 0.84396,-0.8252 1.63166,-1.29407 2.30683,-1.44411 0.69392,-0.13128 1.31283,0.075 1.87547,0.65642 0.0938,0.11252 0.2063,0.24381 0.30007,0.39384 0.11253,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.3946,5.73893 -1.16279,1.10652 z m 6.22655,-4.20105 c -0.50638,0.48762 -1.03151,0.86272 -1.5754,1.12528 -0.52513,0.26257 -0.99399,0.45011 -1.4066,0.56264 l -0.93773,-1.50037 0.075,-0.0563 c 0.15004,-0.0188 0.35634,-0.0375 0.58139,-0.0563 0.24381,-0.0375 0.50638,-0.11253 0.82521,-0.2063 0.28132,-0.093 8 0.58139,-0.22506 0.90022,-0.39385 0.31883,-0.16879 0.61891,-0.39385 0.90023,-0.65641 0.58139,-0.56264 0.93773,-1.10653 1.06901,-1.63166 0.11253,-0.52513 -0.0188,-1.01275 -0.4126,-1.42535 -0.2063,-0.22506 -0.45011,-0.30008 -0.73143,-0.26257 -0.28132,0.0375 -0.6189,0.16879 -1.01275,0.4126 -0.2063,0.11253 -0.43136,0.24381 -0.69393,0.41261 -0.28132,0.16879 -0.56264,0.33758 -0.84396,0.50637 -0.6189,0.31883 -1.16279,0.46887 -1.63165,0.43136 -0.48762,-0.0563 -0.90023,-0.24381 -1.25657,-0.6189 -0.30007,-0.33759 -0.52513,-0.69393 -0.65641,-1.10653 -0.13128,-0.43136 -0.16879,-0.88147 -0.11253,-1.38785 0.0563,-0.46886 0.22506,-0.97524 0.50638,-1.50037 0.26256,-0.52513 0.65641,-1.03151 1.16279,-1.50037 0.4126,-0.39385 0.88147,-0.73144 1.38784,-1.03151 0.50638,-0.28132 0.97525,-0.46887 1.3691,-0.5814 l 0.88147,1.44411 -0.0563,0.0563 c -0.11253,0 -0.28132,0.0375 -0.50637,0.0563 -0.22506,0.0375 -0.48763,0.11253 -0.76895,0.22506 -0.26256,0.075 -0.52513,0.2063 -0.8252,0.37509 -0.30008,0.16879 -0.5 6264,0.3751 -0.82521,0.61891 -0.52513,0.50637 -0.84396,1.01275 -0.95649,1.53788 -0.11252,0.52513 0.0188,0.97524 0.3751,1.35034 0.18754,0.2063 0.43136,0.30007 0.73143,0.28132 0.28132,0 0.6189,-0.13129 1.01275,-0.35634 0.26257,-0.13129 0.50638,-0.30008 0.76894,-0.46887 0.28132,-0.15004 0.52513,-0.31883 0.7877,-0.46887 0.60015,-0.33758 1.12528,-0.48762 1.6129,-0.46886 0.48762,0.0187 0.90023,0.22505 1.27532,0.60015 0.30007,0.31883 0.50638,0.71267 0.65641,1.16279 0.13129,0.45011 0.16879,0.91897 0.0938,1.4066 -0.075,0.52513 -0.24381,1.0315 -0.54389,1.57539 -0.28132,0.52513 -0.69392,1.03151 -1.21905,1.53788 z m 10.67141,-10.48386 -1.4066,1.35034 -5.12003,-0.93774 -0.22506,1.76294 1.61291,2.71943 -1.18155,1.12528 -6.95798,-11.77793 1.18154,-1.12528 4.46361,7.55813 0.75019,-7.33308 1.53788,-1.46286 -0.84396,7.05175 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + inkscape:connector-curvature="0" /> + <path + id="path3061" + d="m 383.62682,392.9854 c -0.58139,0.60015 -1.2003,1.08777 -1.83796,1.50038 -0.65641,0.4126 -1.35033,0.75018 -2.11927,1.01275 l -1.10653,-1.65041 0.0938,-0.0938 c 0.75019,-0.0188 1.50038,-0.22505 2.26932,-0.60015 0.75019,-0.37509 1.38784,-0.8252 1.91297,-1.35033 0.84397,-0.88147 1.33159,-1.70668 1.44411,-2.51313 0.0938,-0.80645 -0.11252,-1.46286 -0.63765,-1.98799 -0.28132,-0.28132 -0.60015,-0.41261 -0.95649,-0.43136 -0.35634,-0.0188 -0.73143,0.075 -1.12528,0.30007 -0.33759,0.20631 -0.71268,0.45012 -1.14404,0.75019 -0.4126,0.30008 -0.8252,0.5814 -1.23781,0.82521 -0.76894,0.50637 -1.50037,0.75018 -2.19429,0.76894 -0.69393,0.0188 -1.29408,-0.22506 -1.80045,-0.73143 -0.86272,-0.86272 -1.23781,-1.93174 -1.08777,-3.24456 0.15003,-1.29407 0.78769,-2.53188 1.93173,-3.69467 0.6189,-0.63766 1.25656,-1.16279 1.89422,-1.53789 0.65641,-0.39384 1.23781,-0.69392 1.80045,-0.90022 l 1.03151,1.55664 -0.0938,0.0938 c -0.54388,0.0188 -1.18154,0.22506 -1.89422,0.56264 -0.71268,0.35634 -1.36909, 0.82521 -1.95048,1.4066 -0.73144,0.75019 -1.14404,1.50038 -1.25657,2.26932 -0.11253,0.75018 0.0938,1.38784 0.60015,1.87546 0.26257,0.26257 0.5814,0.41261 0.93774,0.46887 0.35633,0.0375 0.78769,-0.0938 1.29407,-0.4126 0.31883,-0.2063 0.73143,-0.46887 1.23781,-0.82521 0.52513,-0.33758 0.95648,-0.6189 1.31282,-0.84396 0.73144,-0.4126 1.4066,-0.6189 2.00675,-0.6189 0.61891,0 1.16279,0.24381 1.63166,0.71268 0.39385,0.39384 0.71268,0.88147 0.90022,1.46286 0.20631,0.58139 0.28132,1.2003 0.22506,1.8192 -0.075,0.67517 -0.26257,1.35034 -0.5814,2.00675 -0.33758,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 6.32033,-15.11626 c -0.0938,-0.13129 -0.1688,-0.24381 -0.24382,-0.33759 -0.075,-0.075 -0.16879,-0.16879 -0.26256,-0.26256 -0.43136,-0.43136 -0.90022,-0.65642 -1.36909,-0.65642 -0.48762,0 -0.97524,0.26257 -1.50038,0.7877 -0.56264,0.58139 -0.90022,1.27532 -0.97524,2.08177 -0.075,0.78769 0.0938,1.55664 0.52513,2.30682 z m 2.08176,6.54538 c -0.93773,0.93773 -1.87546,1.46286 -2.85071,1.57539 -0.97 524,0.0938 -1.89422,-0.28132 -2.75693,-1.10653 -1.23781,-1.2378 -1.93173,-2.68191 -2.04426,-4.35108 -0.13128,-1.66917 0.37509,-3.09452 1.51913,-4.25731 0.76894,-0.76894 1.53788,-1.18154 2.32558,-1.21905 0.78769,-0.0188 1.53788,0.30007 2.2318,0.97524 0.13128,0.13128 0.30008,0.33758 0.52513,0.63766 0.24381,0.28132 0.48762,0.63766 0.76894,1.06901 l -4.93247,5.04501 c 0.0938,0.13128 0.18754,0.26257 0.28132,0.39385 0.11252,0.11253 0.2063,0.22505 0.31882,0.31883 0.56265,0.56264 1.2003,0.8252 1.85672,0.80645 0.67517,-0.0375 1.33158,-0.37509 1.96924,-1.01275 0.43136,-0.45012 0.80645,-0.994 1.08777,-1.65041 0.30007,-0.63766 0.48762,-1.23781 0.58139,-1.7817 l 0.075,-0.0563 0.994,1.46286 c -0.13128,0.28132 -0.24381,0.52513 -0.33758,0.75019 -0.0938,0.22506 -0.24381,0.48762 -0.43136,0.80645 -0.18755,0.31883 -0.35634,0.58139 -0.52513,0.80645 -0.15004,0.22506 -0.3751,0.48762 -0.65642,0.7877 z m 5.45761,-16.44785 c 0.0938,0.0938 0.22506,0.24381 0.3751,0.4126 0.13128,0.18755 0.26256,0.35634 0.35634, 0.50638 l 3.4321,5.38259 -1.12528,1.14403 -3.0195,-4.70742 c -0.16879,-0.26256 -0.31883,-0.48762 -0.45011,-0.67517 -0.13129,-0.16879 -0.28132,-0.33758 -0.45012,-0.50637 -0.33758,-0.33759 -0.67516,-0.50638 -1.01275,-0.50638 -0.33758,0 -0.73143,0.22506 -1.16279,0.67517 -0.30007,0.30007 -0.54388,0.73143 -0.75018,1.27532 -0.18755,0.54388 -0.33759,1.10652 -0.45012,1.68792 l 3.93848,6.18904 -1.12528,1.14403 -5.28881,-8.28956 1.12528,-1.14404 0.58139,0.91898 c 0.13128,-0.73143 0.30008,-1.36909 0.50638,-1.91297 0.2063,-0.54389 0.50637,-1.01276 0.91898,-1.42536 0.58139,-0.58139 1.18154,-0.90022 1.80045,-0.93773 0.63765,-0.0375 1.2378,0.2063 1.80044,0.76894 z m 4.40735,-12.99699 7.35183,11.55288 -1.12528,1.14403 -0.54388,-0.86271 c -0.15004,0.86271 -0.33759,1.51913 -0.50638,1.95049 -0.18755,0.43135 -0.46887,0.84396 -0.8252,1.21905 -0.63766,0.63766 -1.35034,0.95649 -2.11928,0.93773 -0.7877,-0.0375 -1.55664,-0.43135 -2.34434,-1.18154 -0.65641,-0.65641 -1.18154,-1.36909 -1.55663,-2.13803 -0.3938 5,-0.7877 -0.63766,-1.55664 -0.73144,-2.34434 -0.0938,-0.76894 -0.0375,-1.51913 0.1688,-2.25056 0.2063,-0.71268 0.58139,-1.35033 1.10652,-1.87547 0.35634,-0.35633 0.71268,-0.65641 1.08777,-0.88147 0.3751,-0.24381 0.76894,-0.4126 1.2003,-0.52513 l -2.30682,-3.58214 z m 1.89422,5.90772 c -0.4126,0.13129 -0.78769,0.30008 -1.10652,0.48763 -0.31883,0.2063 -0.63766,0.45011 -0.91898,0.75018 -0.4126,0.4126 -0.69392,0.90023 -0.80645,1.42536 -0.13128,0.54388 -0.13128,1.10652 0,1.68792 0.11253,0.52513 0.33758,1.06901 0.67517,1.63165 0.33758,0.56264 0.71267,1.05027 1.14403,1.46287 0.48762,0.48762 0.97524,0.75019 1.46287,0.80645 0.46886,0.0375 0.93773,-0.18755 1.4066,-0.65641 0.33758,-0.35634 0.60015,-0.7877 0.76894,-1.31283 0.18754,-0.52513 0.31883,-1.03151 0.4126,-1.53788 z m 15.2288,-3.99474 c -0.5814,0.58139 -1.18155,1.08777 -1.83796,1.50037 -0.63766,0.4126 -1.35034,0.75019 -2.11928,1.01275 l -1.08777,-1.65041 0.075,-0.0938 c 0.75019,-0.0187 1.51913,-0.22506 2.26931,-0.60015 0.75019,-0.37509 1.38785,-0.82521 1.91298,-1.35034 0.86272,-0.88147 1.33158,-1.70667 1.44411,-2.51312 0.11253,-0.80645 -0.11253,-1.46287 -0.63766,-1.988 -0.28132,-0.28132 -0.60015,-0.43135 -0.95649,-0.45011 -0.33758,-0.0188 -0.71267,0.0938 -1.12528,0.31883 -0.31883,0.2063 -0.71267,0.45011 -1.12528,0.75019 -0.43135,0.30007 -0.84396,0.56264 -1.23781,0.8252 -0.78769,0.50638 -1.51912,0.75019 -2.19429,0.76894 -0.69392,0 -1.29407,-0.24381 -1.8192,-0.75018 -0.86272,-0.84396 -1.21906,-1.91298 -1.08778,-3.22581 0.15004,-1.29407 0.7877,-2.53188 1.93174,-3.69467 0.63765,-0.63766 1.25656,-1.16279 1.91297,-1.55663 0.63766,-0.3751 1.23781,-0.67517 1.7817,-0.88147 l 1.0315,1.55663 -0.075,0.0938 c -0.56264,0.0187 -1.20029,0.2063 -1.91297,0.56264 -0.71268,0.35634 -1.36909,0.8252 -1.95049,1.4066 -0.71268,0.75018 -1.14403,1.50037 -1.23781,2.26931 -0.11252,0.75019 0.075,1.38785 0.5814,1.87547 0.26256,0.26257 0.58139,0.4126 0.93773,0.45011 0.3751,0.0375 0.80645,-0.0938 1.29407,-0.39385 0.31883,-0.2063 0.73144,-0.46886 1.25657,-0.8252 0.50637,-0.33759 0.93773,-0.61891 1.31282,-0.84396 0.73144,-0.43136 1.38785,-0.63766 2.00675,-0.61891 0.60015,0 1.14404,0.24381 1.61291,0.71268 0.4126,0.39385 0.71267,0.88147 0.91897,1.46287 0.20631,0.58139 0.26257,1.18154 0.20631,1.8192 -0.0563,0.67517 -0.26257,1.33158 -0.5814,2.00675 -0.31883,0.67517 -0.8252,1.35034 -1.50037,2.04426 z m 3.26331,-17.32932 0.73143,1.12528 -2.34433,2.36309 2.43811,3.82595 c 0.13128,0.2063 0.28132,0.41261 0.45011,0.65642 0.16879,0.22505 0.31883,0.4126 0.45011,0.52513 0.30008,0.30007 0.5814,0.43136 0.88147,0.43136 0.30007,-0.0188 0.63766,-0.22506 1.03151,-0.61891 0.16879,-0.16879 0.33758,-0.39385 0.50637,-0.69392 0.1688,-0.28132 0.28132,-0.48762 0.31883,-0.60015 l 0.0563,-0.0563 0.78769,1.18155 c -0.16879,0.28132 -0.35634,0.58139 -0.58139,0.86271 -0.2063,0.30008 -0.43136,0.54389 -0.61891,0.75019 -0.54388,0.56264 -1.10652,0.88147 -1.65041,0.93773 -0.54388,0.075 -1.08777,-0.15003 -1.63165,-0.67516 -0.13129,-0.13129 -0.24381,-0.26257 -0.35 634,-0.41261 -0.11253,-0.15003 -0.22506,-0.31883 -0.35634,-0.50637 l -2.85071,-4.44486 -0.75019,0.76894 -0.73143,-1.12528 0.76894,-0.76894 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 7.95198,-1.63166 c -0.60015,0.63766 -1.10652,1.25657 -1.50037,1.80045 -0.4126,0.56264 -0.71268,1.06902 -0.88147,1.51913 -0.18755,0.46887 -0.26257,0.90023 -0.18755,1.29407 0.0563,0.39385 0.26257,0.75019 0.60015,1.08778 0.30008,0.30007 0.61891,0.4126 0.97524,0.37509 0.33759,-0.0563 0.73144,-0.28132 1.14404,-0.71268 0.35634,-0.37509 0.65641,-0.8252 0.86271,-1.36909 0.20631,-0.54389 0.35634,-1.10653 0.45012,-1.66917 z m 2.21305,3.48837 c -0.0375,0.1688 -0.0938,0.41261 -0.16879,0.71268 -0.0563,0.30008 -0.15004,0.60015 -0.24381,0.88147 -0.11253,0.30008 -0.26257,0.61891 -0.45011,0.93773 -0.18755,0.31883 -0.45011,0.63766 -0.7877,0.97525 -0.52513,0.54388 -1.12528,0.8252 -1.76294,0.86271 -0.65641,0.0188 -1.23781,-0.2063 -1.74418,-0.71268 -0.54389,-0.54388 -0.88147,-1.10652 -1.01275,-1.70667 -0.15004,-0 .60015 -0.0938,-1.25656 0.11252,-1.96924 0.22506,-0.67517 0.60015,-1.4066 1.14404,-2.15679 0.52513,-0.75019 1.18154,-1.55664 1.98799,-2.41935 -0.0938,-0.13128 -0.16879,-0.24381 -0.24381,-0.33758 -0.0563,-0.11253 -0.13128,-0.20631 -0.22505,-0.28133 -0.2063,-0.2063 -0.39385,-0.31882 -0.60015,-0.35633 -0.18755,-0.0375 -0.39385,-0.0375 -0.61891,0.0375 -0.2063,0.075 -0.43135,0.18754 -0.63766,0.35633 -0.2063,0.1688 -0.43135,0.35634 -0.65641,0.5814 -0.33758,0.35634 -0.67517,0.80645 -0.994,1.35034 -0.31883,0.56264 -0.56264,1.0315 -0.73143,1.42535 l -0.0563,0.0563 -0.93774,-1.35033 c 0.1688,-0.30008 0.43136,-0.71268 0.80645,-1.23781 0.35634,-0.52513 0.73144,-0.994 1.14404,-1.4066 0.82521,-0.84396 1.59415,-1.35034 2.26931,-1.51913 0.67517,-0.15004 1.31283,0.0375 1.89423,0.60015 0.0938,0.11253 0.2063,0.24381 0.31883,0.37509 0.11252,0.15004 0.2063,0.28132 0.28132,0.41261 l 3.60089,5.6264 -1.12528,1.12528 z m 2.02551,-14.29106 0.71268,1.12528 -2.32558,2.38185 2.4381,3.82595 c 0.13129,0.18755 0.2 6257,0.4126 0.45012,0.63766 0.16879,0.24381 0.31882,0.4126 0.43135,0.54388 0.30008,0.28132 0.60015,0.43136 0.90023,0.41261 0.28132,0 0.63766,-0.2063 1.0315,-0.61891 0.1688,-0.16879 0.33759,-0.39384 0.50638,-0.67516 0.16879,-0.30008 0.26257,-0.48763 0.31883,-0.60015 l 0.0563,-0.075 0.7877,1.18154 c -0.16879,0.30008 -0.37509,0.5814 -0.5814,0.88147 -0.22505,0.28132 -0.43135,0.54389 -0.6189,0.73143 -0.56264,0.56264 -1.10652,0.88147 -1.65041,0.95649 -0.56264,0.0563 -1.10653,-0.16879 -1.63166,-0.69392 -0.13128,-0.13128 -0.24381,-0.26257 -0.35634,-0.4126 -0.11252,-0.13129 -0.24381,-0.30008 -0.37509,-0.50638 l -2.83195,-4.44486 -0.76895,0.76894 -0.71267,-1.10652 0.76894,-0.7877 -1.51913,-2.38184 1.12528,-1.16279 1.51913,2.38184 z m 6.88296,-7.033 5.30757,8.27081 -1.12528,1.14404 -0.60015,-0.90023 c -0.13128,0.71268 -0.28132,1.35034 -0.48762,1.89422 -0.2063,0.54389 -0.50637,1.03151 -0.91898,1.44411 -0.58139,0.5814 -1.18154,0.90023 -1.80044,0.93774 -0.61891,0.0375 -1.21906,-0.22506 -1.7817,-0 .76894 -0.13128,-0.13129 -0.26256,-0.28132 -0.37509,-0.43136 -0.11253,-0.15004 -0.24381,-0.31883 -0.3751,-0.50638 l -3.4321,-5.38259 1.12528,-1.14403 3.0195,4.70742 c 0.11253,0.2063 0.26257,0.4126 0.43136,0.63766 0.18755,0.24381 0.31883,0.4126 0.45011,0.52513 0.33759,0.35634 0.69392,0.52513 1.05026,0.50638 0.33759,0 0.73144,-0.20631 1.14404,-0.63766 0.30007,-0.30008 0.54388,-0.73144 0.75019,-1.29408 0.2063,-0.56264 0.35633,-1.12528 0.45011,-1.66916 l -3.95724,-6.18904 z m 9.78994,4.03226 c -0.50637,0.50637 -1.01275,0.90022 -1.53788,1.18154 -0.52513,0.28132 -0.994,0.48762 -1.4066,0.6189 l -0.97525,-1.46286 0.0563,-0.075 c 0.16879,0 0.35634,-0.0375 0.60015,-0.075 0.22505,-0.0375 0.50637,-0.11253 0.80645,-0.22505 0.28132,-0.11253 0.58139,-0.24381 0.88147,-0.43136 0.31883,-0.16879 0.60015,-0.4126 0.88147,-0.69392 0.56264,-0.56264 0.90022,-1.12528 1.01275,-1.65041 0.11253,-0.54389 -0.0563,-1.01276 -0.46887,-1.42536 -0.2063,-0.2063 -0.45011,-0.28132 -0.73143,-0.22506 -0.28132,0.0563 -0.61 89,0.18755 -0.994,0.43136 -0.18754,0.13128 -0.43135,0.28132 -0.69392,0.46887 -0.26256,0.16879 -0.52513,0.33758 -0.80645,0.50637 -0.6189,0.35634 -1.14403,0.50638 -1.63166,0.48763 -0.48762,-0.0188 -0.90022,-0.20631 -1.27531,-0.56264 -0.31883,-0.31883 -0.54389,-0.67517 -0.67517,-1.08778 -0.15004,-0.4126 -0.2063,-0.86271 -0.16879,-1.36909 0.0375,-0.48762 0.18754,-0.99399 0.45011,-1.51912 0.24381,-0.54389 0.6189,-1.06902 1.10652,-1.55664 0.39385,-0.41261 0.84396,-0.76894 1.35034,-1.06902 0.50638,-0.30007 0.95649,-0.50638 1.35034,-0.6189 l 0.93773,1.38784 -0.0563,0.075 c -0.11253,0 -0.28132,0.0375 -0.50638,0.075 -0.22506,0.0563 -0.46887,0.13128 -0.76894,0.24381 -0.24381,0.0938 -0.52513,0.22506 -0.80645,0.4126 -0.28132,0.18755 -0.56264,0.39385 -0.80645,0.65642 -0.48763,0.50637 -0.7877,1.01275 -0.90023,1.55663 -0.0938,0.52514 0.0375,0.97525 0.4126,1.33159 0.20631,0.2063 0.45012,0.28132 0.75019,0.26256 0.28132,-0.0188 0.61891,-0.15004 1.01275,-0.39385 0.24381,-0.15003 0.48763,-0.31883 0.7501 9,-0.48762 0.26257,-0.16879 0.50638,-0.33758 0.76894,-0.50637 0.5814,-0.35634 1.10653,-0.52513 1.59415,-0.52513 0.48762,0 0.90022,0.18754 1.27532,0.56264 0.31883,0.30007 0.56264,0.69392 0.71267,1.12528 0.15004,0.45011 0.20631,0.91897 0.15004,1.4066 -0.0563,0.52513 -0.22505,1.05026 -0.48762,1.59414 -0.28132,0.54389 -0.67517,1.06902 -1.16279,1.5754 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + inkscape:connector-curvature="0" /> + <text + id="text3063" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="507.19437" + x="233.59662" + xml:space="preserve">Task Execution,</text> + <text + id="text3065" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="528.19958" + x="236.89745" + xml:space="preserve">Data Exchange</text> + <text + id="text3067" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="507.19437" + x="646.51672" + xml:space="preserve">Task Execution,</text> + <text + id="text3069" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="528.19958" + x="649.8175" + xml:space="preserve">Data Exchange</text> + <path + id="path3071" + d="m 564.90948,478.2629 -122.78684,1.87546 0.0938,5.62641 122.76808,-1.87547 z m -15.24755,15.32256 20.8552,-12.60314 -21.23029,-11.94672 c -1.35034,-0.76894 -3.05701,-0.28132 -3.82595,1.06901 -0.75019,1.35034 -0.28132,3.07577 1.06901,3.84471 l 17.02925,9.58364 -0.075,-4.85746 -16.72917,10.09001 c -1.33158,0.80645 -1.74418,2.53188 -0.93773,3.86347 0.78769,1.33158 2.53188,1.76294 3.8447,0.95648 z m -92.21672,-23.14326 -20.85519,12.60314 21.23028,11.94672 c 1.35034,0.76895 3.07577,0.28133 3.82596,-1.06901 0.76894,-1.35034 0.28132,-3.07577 -1.06902,-3.82595 l 0,0 -17.02924,-9.6024 0.075,4.87622 16.72917,-10.10877 c 1.33158,-0.80645 1.76293,-2.53188 0.95648,-3.86346 -0.80645,-1.33158 -2.53188,-1.76294 -3.86346,-0.95649 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> + <text + id="text3073" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="516.58087" + x="466.24557" + xml:space="preserve">Exchange </text> + <text + id="text3075" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="537.58606" + x="451.39188" + xml:space="preserve">Intermediate</text> + <text + id="text3077" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="558.59131" + x="476.7482" + xml:space="preserve">Results</text> + <text + id="text3079" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="579.59656" + x="418.08359" + xml:space="preserve">(</text> + <text + id="text3081" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="579.59656" + x="426.03558" + xml:space="preserve">shuffle</text> + <text + id="text3083" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="579.59656" + x="490.85172" + xml:space="preserve">/ </text> + <text + id="text3085" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="579.59656" + x="504.95523" + xml:space="preserve">broadcast</text> + <text + id="text3087" + style="font-size:17.55437279px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana" + y="579.59656" + x="591.22675" + xml:space="preserve">) </text> + </g> + </g> +</svg> http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/FlinkOnYarn.svg ---------------------------------------------------------------------- diff --git a/docs/fig/FlinkOnYarn.svg b/docs/fig/FlinkOnYarn.svg new file mode 100644 index 0000000..3eddf50 --- /dev/null +++ b/docs/fig/FlinkOnYarn.svg @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="877" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="397" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto"> + <!--Generated by ySVG 2.5--> + <defs id="genericDefs"/> + <g> + <defs id="defs1"> + <linearGradient x1="336.5" gradientUnits="userSpaceOnUse" x2="506.5" y1="386.5" y2="426.5" id="linearGradient1" spreadMethod="reflect"> + <stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/> + <stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/> + </linearGradient> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"> + <path d="M0 0 L877 0 L877 397 L0 397 L0 0 Z"/> + </clipPath> + <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"> + <path d="M77 45 L954 45 L954 442 L77 442 L77 45 Z"/> + </clipPath> + </defs> + <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(-77,-45)" stroke="white"> + <rect x="77" width="877" height="397" y="45" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)"> + <rect x="92" y="209" clip-path="url(#clipPath2)" width="119" rx="4" ry="4" height="117" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="107.9238" xml:space="preserve" y="226.1387" clip-path="url(#clipPath2)" stroke="none">"Master" Node</text> + <rect x="92" y="209" clip-path="url(#clipPath2)" fill="none" width="119" rx="4" ry="4" height="117"/> + </g> + <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)"> + <rect x="369" y="60" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="375.498" xml:space="preserve" y="115.6699" clip-path="url(#clipPath2)" stroke="none">YARN Resource</text> + <text x="395.4492" xml:space="preserve" y="129.6387" clip-path="url(#clipPath2)" stroke="none">Manager</text> + <rect x="369" y="60" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/> + </g> + <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)"> + <rect x="369" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="373.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text> + <rect x="369" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/> + </g> + <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)"> + <rect x="614" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="618.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text> + <rect x="614" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/> + </g> + <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="url(#linearGradient1)"> + <path d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <path fill="none" d="M336.5 394.5 C341.6 386.5 501.4 386.5 506.5 394.5 L506.5 418.5 C501.4 426.5 341.6 426.5 336.5 418.5 Z" clip-path="url(#clipPath2)"/> + <path fill="none" d="M506.5 394.5 C501.4 402.5 341.6 402.5 336.5 394.5" clip-path="url(#clipPath2)"/> + <text x="405.1084" xml:space="preserve" y="410.6543" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">HDFS</text> + </g> + <g fill="rgb(0,153,153)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(0,153,153)"> + <rect x="791" y="212" clip-path="url(#clipPath2)" width="105" rx="4" ry="4" height="117" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="795.8457" xml:space="preserve" y="229.1387" clip-path="url(#clipPath2)" stroke="none">YARN Container</text> + <rect x="791" y="212" clip-path="url(#clipPath2)" fill="none" width="105" rx="4" ry="4" height="117"/> + </g> + <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)"> + <rect x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="137.4375" xml:space="preserve" y="254.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text> + <text x="115.7959" xml:space="preserve" y="268.6387" clip-path="url(#clipPath2)" stroke="none">YARN Client</text> + <rect fill="none" x="99" width="105" height="30" y="242.5" clip-path="url(#clipPath2)"/> + </g> + <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)"> + <rect x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="407.4375" xml:space="preserve" y="264.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text> + <text x="385.9512" xml:space="preserve" y="278.6387" clip-path="url(#clipPath2)" stroke="none">JobManager</text> + <rect fill="none" x="375" width="93" height="30" y="252.5" clip-path="url(#clipPath2)"/> + </g> + <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)"> + <rect x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="389.5371" xml:space="preserve" y="294.6699" clip-path="url(#clipPath2)" stroke="none">YARN App.</text> + <text x="401.0098" xml:space="preserve" y="308.6387" clip-path="url(#clipPath2)" stroke="none">Master</text> + <rect fill="none" x="375" width="93" height="30" y="282.5" clip-path="url(#clipPath2)"/> + </g> + <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)"> + <rect x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="652.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text> + <text x="626.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text> + <rect fill="none" x="620" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/> + </g> + <g fill="rgb(51,153,102)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-77,-45)" stroke="rgb(51,153,102)"> + <rect x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)" stroke="none"/> + </g> + <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-77,-45)" stroke-linecap="butt"> + <text x="829.4375" xml:space="preserve" y="267.6699" clip-path="url(#clipPath2)" stroke="none">Flink</text> + <text x="803.2578" xml:space="preserve" y="281.6387" clip-path="url(#clipPath2)" stroke="none">TaskManager</text> + <rect fill="none" x="797" width="93" height="30" y="255.5" clip-path="url(#clipPath2)"/> + <text x="917.1621" xml:space="preserve" y="274.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">...</text> + <path fill="none" d="M210.991 234.6698 L361.997 151.3369" clip-path="url(#clipPath2)"/> + <path d="M369.0012 147.4715 L356.079 148.8919 L361.1215 151.82 L360.9107 157.6472 Z" clip-path="url(#clipPath2)" stroke="none"/> + <text x="157.7557" xml:space="preserve" y="141.7122" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">2. Register resources </text> + <text x="150.4286" xml:space="preserve" y="155.681" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and request AppMaster </text> + <text x="199.911" xml:space="preserve" y="169.6497" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">container</text> + <path fill="none" d="M421.5 177.0215 L421.5 204.0303" clip-path="url(#clipPath2)"/> + <path d="M421.5 212.0303 L426.5 200.0303 L421.5 203.0303 L416.5 200.0303 Z" clip-path="url(#clipPath2)" stroke="none"/> + <text x="452.5664" xml:space="preserve" y="198.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">3. Allocate AppMaster Container</text> + <path fill="none" d="M473.9872 270.5 L606.0008 270.5" clip-path="url(#clipPath2)"/> + <path d="M614.0008 270.5 L602.0008 265.5 L605.0008 270.5 L602.0008 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/> + <text x="481.2285" xml:space="preserve" y="304.6543" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">4. Allocate Worker</text> + <path fill="none" d="M210.991 298.1268 L380.3388 385.3096" clip-path="url(#clipPath2)"/> + <path d="M387.4516 388.9714 L379.071 379.0333 L379.4497 384.8519 L374.4938 387.9242 Z" clip-path="url(#clipPath2)" stroke="none"/> + <text x="207.4763" xml:space="preserve" y="355.1486" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">1. Store Uberjar</text> + <text x="201.4939" xml:space="preserve" y="369.1174" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">and configuration</text> + <path fill="none" d="M421.5 388.4707 L421.5 336.9957" clip-path="url(#clipPath2)" stroke="gray"/> + <path fill="gray" d="M421.5 328.9957 L416.5 340.9957 L421.5 337.9957 L426.5 340.9957 Z" clip-path="url(#clipPath2)" stroke="none"/> + <path fill="none" d="M453.1718 388.9189 L606.9806 303.5393" clip-path="url(#clipPath2)" stroke="gray"/> + <path fill="gray" d="M613.9752 299.6566 L601.0566 301.109 L606.1063 304.0247 L605.91 309.8523 Z" clip-path="url(#clipPath2)" stroke="none"/> + <path fill="none" d="M719.0037 270.5 L783.0085 270.5" clip-path="url(#clipPath2)"/> + <path d="M791.0085 270.5 L779.0085 265.5 L782.0085 270.5 L779.0085 275.5 Z" clip-path="url(#clipPath2)" stroke="none"/> + <path fill="none" d="M473.6061 389.7075 L783.3726 289.8775" clip-path="url(#clipPath2)" stroke="gray"/> + <path fill="gray" d="M790.987 287.4236 L778.0318 286.3455 L782.4208 290.1843 L781.0992 295.8634 Z" clip-path="url(#clipPath2)" stroke="none"/> + <text x="542.0724" xml:space="preserve" y="392.1359" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Always Bootstrap containers with</text> + <text x="593.1105" xml:space="preserve" y="406.1046" font-weight="bold" clip-path="url(#clipPath2)" stroke="none">Uberjar and config</text> + </g> + </g> +</svg> http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/back_pressure_sampling.png ---------------------------------------------------------------------- diff --git a/docs/fig/back_pressure_sampling.png b/docs/fig/back_pressure_sampling.png new file mode 100644 index 0000000..ad6ce2f Binary files /dev/null and b/docs/fig/back_pressure_sampling.png differ http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/back_pressure_sampling_high.png ---------------------------------------------------------------------- diff --git a/docs/fig/back_pressure_sampling_high.png b/docs/fig/back_pressure_sampling_high.png new file mode 100644 index 0000000..15372fd Binary files /dev/null and b/docs/fig/back_pressure_sampling_high.png differ http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/back_pressure_sampling_in_progress.png ---------------------------------------------------------------------- diff --git a/docs/fig/back_pressure_sampling_in_progress.png b/docs/fig/back_pressure_sampling_in_progress.png new file mode 100644 index 0000000..96ec3cd Binary files /dev/null and b/docs/fig/back_pressure_sampling_in_progress.png differ http://git-wip-us.apache.org/repos/asf/flink/blob/844c874b/docs/fig/back_pressure_sampling_ok.png ---------------------------------------------------------------------- diff --git a/docs/fig/back_pressure_sampling_ok.png b/docs/fig/back_pressure_sampling_ok.png new file mode 100644 index 0000000..2ca2d51 Binary files /dev/null and b/docs/fig/back_pressure_sampling_ok.png differ
