# Copyright 2008 The Apache Software Foundation Licensed under the
# Apache License, Version 2.0 (the "License"); you may not use this
# file except in compliance with the License.  You may obtain a copy
# of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
# required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.  See the License for the specific language governing
# permissions and limitations under the License.

This package implements a fair scheduler for MapReduce jobs with additional
support for guaranteed shares and job limits.

The functionality of this scheduler is described in the Forrest 
documentation at http://hadoop.apache.org/core/ or alternatively, in the 
hadoop release it can be found at $HADOOP_HOME/docs. In order to build the 
documentation on your own from source please use the following command in 
the downloaded source folder:

ant docs -Dforrest.home=path to forrest -Djava5.home= path to jdk5. 

The documentation so built would be under $HADOOP_HOME/build/docs
