You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-user@hadoop.apache.org by "R. James Firby" <fi...@powerset.com> on 2007/03/09 01:29:56 UTC
Change in JobClient behavior may not be ideal
We finally upgraded our Hadoop install from 9.2 to 12.0. It went pretty
smoothly. Kudos to all. However, one change in behavior of the JobClient
seems like a problem.
In our install we have several different clusters running at different
locations with different sizes and characteristics. We have been submitting
jobs to these clusters from a separate, central point using JobClient.
In the past all we had to do was point JobClient at the right JobTracker and
submit the job. The -jt flag to JobClient makes this simple.
However, now the JobClient computes the task splits at the central point
rather than at the JobTracker. That step involves looking up the default
number of mapred tasks in the cluster configuration (ie. mapred.map.tasks).
But, unfortunately, the cluster configuration isn't available where we are
running the JobClient, it is available at the cluster. In the past this
didn't matter because all the JobClient really needed from the configuration
was communication information.
For things to work right, we need to maintain a separate configuration for
every cluster at the central point and at every other place where we might
want to use JobClient. It was much simpler when we could use a single
central config to submit jobs to all clusters.
It might be good to keep cluster specific configuration parameters from
being needed to submit a job using JobClient.
In addition, doing the splits in the JobClient lets a locally set
mapred.map.tasks value override the value set in hadoop-site.xml on the
cluster, which seems like a bug.
Jim Firby
Powerset Inc.
Re: Change in JobClient behavior may not be ideal
Posted by Owen O'Malley <ow...@yahoo-inc.com>.
On Mar 8, 2007, at 4:29 PM, R. James Firby wrote:
> However, now the JobClient computes the task splits at the central
> point
> rather than at the JobTracker. That step involves looking up the
> default
> number of mapred tasks in the cluster configuration (ie.
> mapred.map.tasks).
> But, unfortunately, the cluster configuration isn't available where
> we are
> running the JobClient, it is available at the cluster. In the past
> this
> didn't matter because all the JobClient really needed from the
> configuration
> was communication information.
The computation of the splits was moved from the job tracker to the
client, to offload the job tracker and more importantly to remove the
need to load the user code in the job tracker.
I agree that since the cluster size and composition are defined by
the cluster, it would make sense to pass back the capacity of the
cluster via the JobSubmissionProtocol like the name of the default
file system is. (I created HADOOP-1100.) I would pull out the default
values out of hadoop-default.xml for mapred.{map,reduce}.tasks and
have JobConf return a number based on the cluster capacity if the
user hasn't given a specific value.
> In addition, doing the splits in the JobClient lets a locally set
> mapred.map.tasks value override the value set in hadoop-site.xml on
> the
> cluster, which seems like a bug.
Once the input splits are generated, the number of splits defines the
number of maps. In my opinion, it is far less confusing to the users
to have conf.getNumMapTasks() return the real number of maps rather
than the original hint.
-- Owen