1.客户端
提交MapReduce的应用程序。每一个job都会在客户端通过JobClient类将应用程序以及配置参数Configuration打包成jar包存储在hdfs上
2.JobTracker
协调作业的运行。JobTracker实际上是一个java应用程序,他的主类是jobTracker。其主要负责的事情包括:与客户端通信、接收客户端的命令(如:提交任务、kill job等)、接收taskTracker心跳(分配Task任务队列,更新Task状态、以及检测状态)、内部处理操作(对job进行初始化,分解成多个map/Reduce Task任务)、按照调度算法对job进行排列等。
3.TaskTracker
运行作业划分后的任务。他也是一个java的应用程序,他的主类是TaskTracker。TaskTracker周期性的向jobTracker发送心跳报告,在rpc调用返回的结果后,解析结果得到JobTracker下发的运行Task的指令就会在Tasktracker节点上准备运行这个task。task的运行是在一个taskTracker进程隔离的jvm中实例中运行的。该jvm实例是通过org.apache.haddoop.mapred.Child来创建的。所以在创建Child VM实例之前,需要做大量的准备工作来启动Task运行。
4.hdfs