This post explains the class relationship when we use ToolRunner to run a MapReduce job. It is not really complicated but we use the below pictorial representation in our workshop when we explain the ToolRunner functionality and it is easy to understand.