# 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 scheduler for Map-Reduce jobs, called Capacity
Task Scheduler (or just Capacity Scheduler), which provides a way to share 
large clusters. 

The functionality of this scheduler is described in the Forrest documentation
under src\docs\src\documentation\content\xdocs\capacity_scheduler.xml.
