  In recent years, the issue of energy consumption in high performance
computing (HPC) systems has attracted a great deal of attention. In response to
this, many energy-aware algorithms have been developed in different layers of
HPC systems, including the hardware layer, service layer and system layer.
These algorithms are of two types: first, algorithms which directly try to
improve the energy by tweaking frequency operation or scheduling algorithms;
and second, algorithms which focus on improving the performance of the system,
with the assumption that efficient running of a system may indirectly save more
energy.
  In this thesis, we develop algorithms in both layers. First, we introduce
three algorithms to directly improve the energy of scheduled tasks at the
hardware level by using Dynamic Voltage Frequency Scaling (DVFS). Second, we
propose two algorithms for modelling and resource provisioning of MapReduce
applications (a well-known parametric distributed framework currently used by
Google, Yahoo, Facebook and LinkedIn) based on its configuration parameters.
Certainly, estimating the performance (e.g., execution time or CPU clock ticks)
of a MapReduce application can be later used for smart scheduling of such
applications in clouds or clusters.
  To evaluate the algorithms, we have conducted extensive simulation and real
experiments on a 5-node physical cluster with up to 25 virtual nodes, using
both synthetic and real world applications. Also, the proposed new algorithms
are compared with existing algorithms by experimentation, and the experimental
results reveal new information on the performance of these algorithms, as well
as on the properties of MapReduce and DVFS. In the end, three open problems are
revealed by the experimental observations, and their importance is explained.
