hadoop主要由两大部分组成,一个是分布式文件系统即hdfs,另一个是分布式计算框架mapreduce。
关于hdfs详细介绍请参考:【hadoop核心之hdfs 架构设计】
本篇重点介绍分布式计算框架mapreduce。在hadoop的mapreduce框架中主要涉及到两个组件:jobtracker和tasktracker(hdfs中的组件是namenode和datanode),下面我们就分别看一下这两个组件。
tasktracker一个hadoop计算进程,运行在hadoop集群的datanode节点上。tasktracker的主要任务是运行jobtracker分配给它的实际计算任务,如运行map、reduce函数,当然也包括shuffle过程。tasktracker任务具体运行在一组slots上,slots的数量可以配置,一般slots的数量会配置成和这台机器的cpu核心数量一致。当tasktracker收到jobtracker分配的一个task时,jobtracker会为这个task单独启动一个jvm进程,也就是说,每个map、reduce任务都会单独运行在一个jvm进程中(jvm也可以重用,这里不多做介绍)。tasktracker被分配的task数量决定于当前还有多少个空闲的slots。tasktracker在运行task的过程中会向jobtracker发送心跳信息,发送心跳出了要告诉jobtracker自己是否存活外,心跳信息中还包含当前空闲的slots数量等信息。
jobtracker进程的作用是运行和监控mapreduce的job,当一个客户端向jobtracker提交任务时,过程如下图:
关于job执行过程的更详细的信息,请参考【 hadoop工作机制】