250 likes | 262 Views
Cloud Computing Lecture #1 Parallel and Distributed Computing. Jimmy Lin The iSchool University of Maryland Monday, January 28, 2008.
E N D
Cloud Computing Lecture #1Parallel and Distributed Computing Jimmy Lin The iSchool University of Maryland Monday, January 28, 2008 Material adapted from slides by Christophe Bisciglia, Aaron Kimball, & Sierra Michels-Slettvet, Google Distributed Computing Seminar, 2007 (licensed under Creation Commons Attribution 3.0 License) This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United StatesSee http://creativecommons.org/licenses/by-nc-sa/3.0/us/ for details
Today’s Topics • Course overview • Introduction to parallel and distributed processing
What’s the course about? • Integration of research and teaching • Team leaders get help on a tough problem • Team members gain valuable experience • Criteria for success: at the end of the course • Each team will have a publishable result • Each team will have a paper suitable for submission to an appropriate conference/journal • Along the way: • Build a community of hadoopers at Maryland • Generate lots of publicity • Have lots of fun!
Hadoop Zen • Don’t get frustrated (take a deep breath)… • This is bleeding edge technology • Be patient… • This is the first time I’ve taught this course • Be flexible… • Lots of uncertainty along the way • Be constructive… • Tell me how I can make everyone’s experience better
Things to go over… • Course schedule • Course objectives • Assignments and deliverables • Evaluation
My Role • To hack alongside everyone • To substantively contribute ideas where appropriate • To serve as a facilitator and a resource • To make sure everything runs smoothly
Outline • Web-Scale Problems • Parallel vs. Distributed Computing • Flynn's Taxonomy • Programming Patterns
Web-Scale Problems • Characteristics: • Lots of data • Lots of crunching (not necessarily complex itself) • Examples: • Obviously, problems involving the Web • Empirical and data-driven research (e.g., in HLT) • “Post-genomics era” in life sciences • High-quality animation • The serious hobbyist
It all boils down to… • Divide-and-conquer • Throwing more hardware at the problem Simple to understand… a lifetime to master…
Parallel vs. Distributed • Parallel computing generally means: • Vector processing of data • Multiple CPUs in a single computer • Distributed computing generally means: • Multiple CPUs across many computers
Flynn’s Taxonomy Instructions Single (SI) Multiple (MI) Single (SD) Data Multiple (MD)
SISD Processor D D D D D D D Instructions
SIMD Processor D0 D0 D0 D0 D0 D0 D0 D1 D1 D1 D1 D1 D1 D1 D2 D2 D2 D2 D2 D2 D2 D3 D3 D3 D3 D3 D3 D3 D4 D4 D4 D4 D4 D4 D4 … … … … … … … Dn Dn Dn Dn Dn Dn Dn Instructions
MIMD Processor D D D D D D D Instructions Processor D D D D D D D Instructions
Parallel vs. Distributed Processor D D D D D D D Instructions Shared Memory Network connectionfor data transfer Processor D D D D D D D Instructions Parallel: Multiple CPUs within a shared memory machine Distributed: Multiple machines with own memory connected over a network
Divide and Conquer “Work” Partition w1 w2 w3 “worker” “worker” “worker” r1 r2 r3 Combine “Result”
Different Workers • Different threads in the same core • Different cores in the same CPU • Different CPUs in a multi-processor system • Different machines in a distributed system
Parallelization Problems • How do we assign work units to workers? • What if we have more work units than workers? • What if workers need to share partial results? • How do we aggregate partial results? • How do we know all the workers have finished? • What if workers die? What is the common theme of all of these problems?
General Theme? • Parallelization problems arise from: • Communication between workers • Access to shared resources (e.g., data) • Thus, we need a synchronization system! • This is tricky: • Finding bugs is hard • Solving bugs is even harder
Multi-Threaded Programming • Difficult because • Don’t know the order in which threads run • Don’t know when threads interrupt each other • Thus, we need: • Semaphores (lock, unlock) • Conditional variables (wait, notify, broadcast) • Barriers • Still, lots of problems: • Deadlock, livelock • Race conditions • ... • Moral of the story: be careful!
Patterns for Parallelism • Several programming methodologies exist to build parallelism into programs • Here are some…
Master/Workers • The master initially owns all data • The master creates workers and assigns tasks • The master waits for workers to report back master workers
Producer/Consumer Flow • Producers create work items • Consumers process them • Can be daisy-chained P C P C P C P C P C P C
Work Queues • All available consumers should be available to process data from any producer • Work queues divorce 1:1 relationship from producers to consumers P C P C shared queue P C
And finally… • The above solutions represent general patterns • In reality: • Lots of one-off solutions, custom code • Burden on the programmer to manage everything • Can we push the complexity onto the system? • MapReduce…for next time