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