I. Introduction
Distributed computing frameworks such as MapReduce [3], Dryad [4] and Spark [5] are very popular among cloud applications. In these frameworks, data flows for one job may share a common performance goal, such as minimizing the completion time of the slowest flow. However, such application-level requirements are often largely overlooked when cloud providers aim at optimizing network-level metrics such as (individual) flow completion time.