1. A computer system for optimizing the scheduling of a plurality of tasks to be executed on a plurality of nodes, the system comprising: a memory storing computer executable instructions; and a processor operatively coupled to said memory and configured to execute the instructions to perform the following steps: receive a plurality of tasks to be scheduled across a plurality of nodes; populate an execution cost matrix with an amount of time to complete a first task of the plurality of tasks to run on a first node of the plurality of nodes; determine whether data relevant to the first task is locally accessible to the first node; determine an amount of time to transfer the first task to a second node of the plurality of nodes; determine an amount of time remaining for the first task to complete execution by the first node and for the first node to be in a state to receive a second task of the plurality of tasks; perform optimization using an optimization function that provides a data locality aware result based at least in part on the determinations; and schedule the first task to one of the first and second nodes based on the provided data locality aware result.