- 对MapReduce的理解
- 客户端启动一个作业
- 向JobTraker请求一个JobId
- 将资源文件复制到HDFS上,包括Jar文件,配置文件,输入划分信息等
- 接收作业后,进入作业队列,根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker来执行(运算移动,数据不移动)分配Reduce任务时,不考虑数据本地化
- TaskTracker每隔一段时间向JobTracker发送一个心跳, 告诉JobTracker它仍在运行,同时心跳中还带有很多信息,比如任务进度
- Map端
- 输入分片(默认64M)进入Map,输出则暂且放到缓存中,缓冲区快要溢出时,会在本地创建一个溢出文件
- Partition(hash)和分区的内部排序,每个分区对应一个reduce任务
- 合并这些溢出文件
- 减少每次写入磁盘的数据量
- 减少下一阶段网络传输的数据量
- 将分区中的数据拷贝给reduce任务(map-TaskTracker-JobTracker)
- Reduce端
- 接收到每个map传输来的有效数据(有序),超过了缓冲区,就写入到磁盘中
- 将溢出文件不断合并成一个更大的有序文件
- 最后一次合并的数据,不输出到磁盘,直接输出到reduce函数中