This paper studies the computation-communication tradeoff in a heterogeneous MapReduce computing system where each distributed node is equipped with different computation capability. We first obtain an achievable communication load for any given computation load and any given function assignment at each node. The proposed file allocation strategy has two steps: first, the input files are partitioned into disjoint batches, each with possibly different size and computed by a distinct node; then, each node computes additional files from its non-computed files according to its redundant computation capability. In the Shuffle phase, coded multicasting opportunities are exploited thanks to the repetitive file allocation among different nodes. Based on this scheme, we further propose the computation-aware and the shuffle-aware function assignments. We prove that, by using proper function assignments, our achievable communication load for any given computation load is within a constant multiplicative gap to the optimum in an equivalent homogeneous system with the same average computation load. Numerical results show that our scheme with shuffle-aware function assignment achieves better computationcommunication tradeoff than existing works in some cases.coded multicasting opportunities are created as many as possible in the Shuffle phase to obtain the optimal computation-communication tradeoff. However, they only consider heterogeneous file allocation in the Map phase due to different storage size, and still assume homogeneous function assignment in the Reduce phase without taking the different computation capabilities across nodes into account. The authors in [13], [14] consider the heterogeneous systems where each node is assigned different number of output functions. Both works obtain an achievable communication load which is within a constant multiplicative gap to the optimum given the considered function assignment. They find that, by assigning more output functions to nodes with more input files, their proposed schemes even outperform the optimal scheme in an equivalent homogeneous system [3] in some cases. However, the heterogeneous systems considered in [13],[14] consist of multiple homogeneous systems where nodes in each system have the same storage and computation capabilities but differ from nodes in other systems, and is thus not suitable to