input data - input format - map - shuffle&sort - reduce - output data
input data 数据存储位置hdfs,切分成多个一定大小的block(128m 备份3个),存储在多个节点(DataNode)上input fomat MR框架基础类之一 实际上是一个接口默认TextInputForma,data splits 数据分割,通过分片算法对block进行分片,每个split包含后一个block中开头部分的数据,record reader 记录读取器从分片读取记录都会调用recordreader,每读取一条记录,调用一次map函数map 将数据进行一个自定义的map处理划分,生成key-valueshuffle&sort:partitioner,sort,spill,meger,combiner,copy,memery,diskpartitioner:决定数据由哪个reduce处理,从分区得到数据{partitioner,key,value}
memoryBuffer:内存缓冲区,每个map的结果和partitioner处理的key value 结果都保存在缓存中
spill:内存缓冲去达到阀值时,溢写spill线程锁定80m的缓冲区,开始将数据写出到本地磁盘中,然后释放内存。每次溢写都会生成一个数据文件。溢出的数据到磁盘前会对数据进行key排序sort,以及合并combiner
sort:缓冲区数据按照key进行排序
combiner:数据合并,相同的key的数据,value值合并,减少输出传输量combiner函数事实上是reduce函数,满足combiner处理不影响{sum , max等}最终reduce的结果时,可以极大提升性能。
注解: MapTask 收集我们的map方法的输出kv对,放到内存缓冲区中,从内存缓存区不断溢出本地磁盘文件,可能会溢出多个文件,然后多个溢出文件将被合并成大的溢出文件,溢出合并过程中,都会调用partitioner 进行分区和针对key进行排序,reduceTask根据自己的分区号,去各个 MapTask 机器上取对应的结果分区数据,reduceTask会取到同一个分区的来自不同 MapTask 的结果文件, ReduceTask 会将这些文件进行归并排序,合并大文件后,shuffle过程也就结束,进入ReduceTask 的逻辑运算过程
reduce:多个reduce任务输入的数据都属于不同的partition,因此结果数据的key不会重复,合并reduce的输出文件即可得到最终的结果client客户端,jobtracker主进程,tasktracker
client 启动作业 job 并向 JobTracker 提交 jobId ,运行作业所需要的资源文件,client计算后输入的分片信息拷贝到hdfs,分片信息决定map任务的数量,并由 JobTracker 分配计算JobTracker 接收到作业任务后,将作业放置在作业队列中,作业调度器根据自己的调度算法调度到某个作业时会根据分片信息,为每个分片数据创建一个map任务,并将map任务分配给 TaskTracker 执行。需要注意的时map任务并不是随意分配给 TaskTracker 执行, TaskTracker 根据主机核的数量和内存大小有固定的map槽和reduce槽TaskTracker 会定时的向 JobTracker 发送心跳,若一定时间没有接收心跳,JobTracker 就默认这个 TaskTracker 节点挂了要做资源回收,并把这个节点上的task重新分配到其他节点上。 JobTracker 会监听task的执行情况,执行完成, JobTracker 会重新job的状态为完成。若是一定数量的task执行失败,这个job就会被标记为失败, JobTracker 将发送job的运行状态信息给client端转自:大数据笔记 MapReduce
