Automatic Optimization of Parallel Dataflow Programs
Total Page:16
File Type:pdf, Size:1020Kb
Automatic Optimization of Parallel Dataflow Programs Christopher Olston, Benjamin Reed, Adam Silberstein, Utkarsh Srivastava Yahoo! Research folston, breed, silberst, [email protected] Abstract and filter are expressed via declarative primitives. Also, Large-scale parallel dataflow systems, e.g., Dryad and multistep processing is explicitly broken down into the Map-Reduce, have attracted significant attention re- constituent steps, e.g., join followed by filter followed cently. High-level dataflow languages such as Pig Latin by face recognition, rather than being buried inside low- and Sawzall are being layered on top of these systems, level constructs such as Map functions. to enable faster program development and more main- These forms of transparency, in addition to making tainable code. These languages engender greater trans- programs easier to write, understand and maintain, also parency in program structure, and open up opportunities open up opportunities for automatic optimization. This for automatic optimization. This paper proposes a set of paper proposes a set of optimization strategies for the optimization strategies for this context, drawing on and DISC paradigm. The aim is not to provide concrete or extending techniques from the database community. proven results, but rather to suggest some jumping-off points for work in this area. Our belief is that good opti- 1 Introduction mization technology, combined with the economics of programmer resources becoming more expensive rela- There is significant recent interest in parallel dataflow tive to computer resources, will trigger a mass migration systems and programming models, e.g., Dryad [19], from low-level programming (e.g., direct Map-Reduce or Jaql [17], Map-Reduce [9], Pig [22] and Sawzall [23]. Dryad programs) to high-level programming (e.g., Jaql, While the roots of this work date back several decades in Pig Latin, SQL), analogous to the migration from assem- the database, programming language and systems com- bly to C-style languages to Java-style languages. munities, the emergence of new and well-funded appli- cation areas requiring very large-scale parallel process- ing is driving this work in somewhat different directions than in the past. In particular, recent work concentrates 1.1 Background: Pig on much larger-scale systems, simpler fault-tolerance and consistency mechanisms, and stylistically different This paper is motivated by our experience with Pig, an languages. This work is leading to a new computing open-source [4] dataflow engine used extensively at Ya- paradigm, which some have dubbed Data-Intensive Scal- hoo! to process large data sets. Pig compiles Pig Latin able Computing (DISC)1 [8]. programs, which are abstract dataflow expressions, into The DISC world is being built bottom-up. Google’s one or more physical dataflow jobs, and then orches- Map-Reduce [9] system introduced scalable, fault- trates the execution of these jobs. Pig currently uses the tolerant implementations of two key dataflow primitives: Hadoop [3] open-source Map-Reduce implementation as independent processing of (groups of) records, and ag- its physical dataflow engine. glomeration of records that contain matching values. The current Pig implementation incorporates two sim- Then came Dryad [19], with built-in support for general ple but critical optimizations: (1) Pig automatically dataflow graphs, including operator chains of arbitrary forms efficient pipelines out of sequences of per-record length and in- and out-bound branching. Now higher- processing steps. (2) Pig exploits the distributive and level languages are being layered on top of these systems, algebraic [15] properties of certain aggregation func- to translate abstract user-supplied dataflow or query tions, such as COUNT, SUM, AVERAGE and some user- expressions into underlying parallel dataflow graphs, defined functions, and automatically performs partial ag- e.g., DryadLINQ [21], Jaql [17], Pig Latin [22] and gregation early (known as combining in the Map-Reduce Sawzall [23]. framework), to reduce data sizes prior to the expensive These high-level languages engender a relatively high data partitioning operation. degree of transparency in program structure. For exam- Our users are demanding more aggressive optimiza- ple, standard data manipulation operations such as join tion of their programs, and indeed there is room to do 1Previously “Data-Intensive Supercomputing.” much more on the optimization front. 1.2 DISC vs. DBMS Optimization 2. Risk avoidance. In cases where key optimization parameters are missing or unreliable, the optimiza- In developing automatic optimization techniques for tion process should be geared toward minimizing the DISC, we can draw upon many ideas and techniques risk of a bad outcome. For example, when select- from the database community, which has studied set- ing derived data to cache, in the absence of reliable oriented data processing for decades, including parallel models for the size and utility of various derived data processing on clusters [7, 11, 13]. While DISC systems sets, the system should construct a diverse portfolio bear a strong resemblance to parallel query processors of cached content (Section 4.2.2). This strategy is in database management systems (DBMS), the context less risky than betting on one particular category of is somewhat different: The DBMS context emphasizes derived data being the most useful, according to an highly declarative languages, normalized data and strong unreliable model. consistency, whereas DISC is geared toward procedural code, flexible data models, and cost-effective scalability 3. Adaptivity. Key parameters like intermediate data through weak consistency and commodity hardware. sizes and black-box function costs, which are hard to estimate a priori, can be measured at runtime. Based Traditional DBMS optimization techniques [18] are on measurements taken at runtime, the system may model-based, i.e., they search for “optimal” execution be able to adjust its execution and storage tactics on strategies over models of the data, operators and execu- the fly, to converge to a better strategy over time. As- tion environment. In the DISC context, accurate models pects that are, at least in principle, amenable to adap- may not be available a priori, because: (1) Data resides tive optimization at runtime include dataflow graph in plain files for ease of interoperability with other tools, structure (see [6, 10, 16]), load balancing across par- and the user may not instruct the system how to parse the titions (see [5, 26]), data placement (Section 4.2.1), data until the last minute; (2) Many of the operators are and caching and reuse of derived data (Section 4.2.2). governed by custom user-supplied code whose cost and data reduction/blowup properties are not known a priori; In this paper we lay out some possible optimization (3) DISC uses large pools of unreliable and perhaps het- strategies for DISC that align with the above principles. erogeneous machines, and formulating simple and accu- Section 3 focuses on single-program optimizations that rate models of the execution environment is a challenge. optimize one program at a time, and highlights ideas Starting around 2000, motivated in part by consid- from the database community that may be applicable in erations related to the ones stated above, the database the DISC context. Section 4 focuses on cross-program community has begun studying adaptive approaches to optimizations that amortize IO and CPU work across re- one optimization problem: query plan selection [6, 10]. lated programs, and proposes several novel approaches. Adaptive query planning does not rely on the a-priori ex- Before discussing these optimizations we briefly de- istence of accurate models, and instead adopts a trial- scribe our Pig Latin language, as a concrete example of and-error, feedback-driven approach. a dataflow language that can be optimized. 1.3 Model-Light Approach 2 Pig Latin Language Overview DISC provides an interesting opportunity to revisit many Pig Latin is our high-level dataflow language for express- of the specifics of query optimization in a new light. In ing computations or transformations over data. We illus- particular, it makes sense to pursue a model-light ap- trate the salient features of Pig Latin through an example. proach, guided by the following principles: Example 1 Suppose we have search query logs for May 1. Discriminative use of information. Optimization 2005 and June 2005, and we wish to find “add-on decisions should not be made on the basis of unre- terms” that spike in June relative to May. An add-on liable information. Conversely, information known term is a term that is used in conjunction with stan- to be reliable should be leveraged. For example, re- dard query phrases, e.g., due to media coverage of liable file size metadata can typically be obtained, the 2012 Olympics selection process there may be a spike in queries like “New York olympics” and “Lon- and knowing file sizes can be useful in selecting don olympics,” with “olympics” being the add-on term. join algorithms (Section 3.2) and scheduling over- Similarly, the term “scientology” may suddenly co-occur lapping programs (Section 4.1). As another exam- with “Tom Cruise,” “depression treatment,” and other ple, although the system may not have reliable cost phrases. The following Pig Latin program describes a and selectivity estimates for all operations, certain dataflow for identifying June add-on terms (the details of 2 ones such as projection, simple filtering and counting the syntax are not important for this paper). are known to be cheap and data-reducing, and hence 2In reality, additional steps would be needed to eliminate pre- ought to be placed early in the execution sequence existing add-ons like “City” in “New York City”; due to space con- when possible (Section 3.1). straints we leave the additional steps as an exercise for the reader. # load and clean May search logs the original one but implies a more efficient evalua- 1. M = load ‘/logs/may05’ as (user, query, time); 2.