A scheduler is software that controls a batch system. Such a batch system makes up for the majority of a compute cluster (about 98%). This is where the big applications are intended to run, where the computation requires a lot of memory and time for computation.
Such a batch system can be viewed as the counterpart of the login-nodes. A user can simply log onto those so called "front-end" nodes and you can type in commands that are immediately executed on the same machine. A batch system however, consists of "back-end" nodes that are not directly accessible for the users. In order to run an application on there, the user has to ask for time and memory resources and specify which application to run inside a [Jobscript|jobscript].
This jobscript can be submitted to the batch system, that is, sending the jobscript from the front-end nodes to the back-end nodes. Any job will first be added to a queue. Based on the resources the job needs, the scheduler will decide when the job will leave the queue, and on which part of the back-end nodes it will run.