You're looking for more flexibility - to use those idle reduce slots to get some useful map tasks executed from the next job. You could alternatively schedule more map tasks from the current job to get it done faster, and scale back once reduces start kicking in. That makes more sense than reserving slots for some future job, or forcing multiplexing of jobs in a single map-reduce cluster.
So rather than having a hard limit of tasks per type per node, allow nodes to run additional tasks while the reduces are just fetching data, and once the data has arrived have the reduces wait for those extra tasks to complete before starting their processing. It would add a bit of complexity to task scheduling, but it would speed up jobs. If you routinely interleave small jobs with large jobs, you may consider setting aside a small subset of your cluster as a separate map-reduce cluster, using a common DFS. Then you'd run your large jobs on the large cluster and the small jobs on the small cluster, sharing data between them. Yoram -----Original Message----- From: Paul Sutter [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 25, 2006 2:55 PM To: [email protected] Subject: Re: Task type priorities during scheduling ? Perfect. Thanks Yoram. And here's the situation, help me out if I have this wrong. Lets say the 20 hour job has 10 hours of mapping to undergo. Thats 10 hours when its first reduce tasks are filling the available reduce slots doing a little bit of copying, and a whole lot of nothing at all. Meanwhile, I would want to run a little 20 minute job, whose reduce tasks would have to wait 10 hours for the first reducers of the big job to complete (so too all those resources that are set aside for reduce tasks, such as the sorter RAM going idle, because the copy phase certainly doesnt need it). Do I have that right, as it stands now? Paul On 7/25/06, Yoram Arnon <[EMAIL PROTECTED]> wrote: > There is, actually, support for multiple jobs. Maps are scheduled separately > from reduces, and when the current job can not saturate the cluster then the > next job's tasks get scheduled, and the next. I've seen several small jobs > execute concurrently on my largish clusters. > Reduces for a given job won't get scheduled before maps of that job are > scheduled, but that makes perfect sense - they'll have no work to do. Once > map tasks start getting scheduled though, if there are available reduce > slots, they'll get assigned reduce tasks. > > Yoram > > -----Original Message----- > From: Paul Sutter [mailto:[EMAIL PROTECTED] > Sent: Tuesday, July 25, 2006 11:01 AM > To: [email protected] > Subject: Re: Task type priorities during scheduling ? > > First, It matters in the case of concurrent jobs. If you submit a 20 > minute job while a 20 hour job is running, it would be nice if the > reducers for the 20 minute job could get a chance to run before the 20 > hour job's mappers have all finished. So even without a throughput > improvement, you have an important capability (although it may require > another minor tweak or two to make possible). > > Secondarily, we often have stragglers, where one mapper runs slower > than the others. When this happens, we end up with a largely idle > cluster for as long as an hour. In cases like these, good support for > concurrent jobs _would_ improve throughput. > > Paul > > On 7/25/06, Doug Cutting <[EMAIL PROTECTED]> wrote: > > Paul Sutter wrote: > > > it should be possible to have lots of tasks in the shuffle phase > > > (mostly, sitting around waiting for mappers to run), but only have > > > "about" one actual reduce phase running per cpu (or whatever works for > > > each of our apps) that gets enough memory for a sorter, does > > > substantial computation, etc. > > > > Ah, now I see your point, although I don't see how this would improve > > overall throughput. In most cases, the optimal configuration is for the > > total number of reduce tasks to be roughly the total number of reduces > > that can run at once. So there is no queue of waiting reduce tasks to > > schedule. > > > > Doug > > > > > > >
