1.Mapreduce的策略
采用分而治之
把非常庞大的数据集,切分成非常多的独立的小分片
然后对每一个分片单独的启动一个map任务
最终通过多个map任务,并行的在多个机器上处理
2.mapreduce的理念
计算向数据靠拢而不是数据向计算靠拢
3.mapreduce的架构
一个master 服务器-->作业跟踪器jobTracker-->负责整个作业的调度和处理以及失败和恢复
若干个slave服务器--->负责具体任务的执行的组件taskTracker-->负责接收jobTracker给它发的作业处理指令完成具体的 任务处理
以slot为单位调度
jobTrack:作业跟踪器
负责资源的监控和作业的调度
监控底层的task以及当前job的健康状况
如果tasktrack出现错误则转移到相近的节点
taskTrack:任务调度器
执行具体的任务接收jobtrack发送过来的命令
把资源使用情况通过心跳的形式发送给jobtrack
Map 输入<K1,V1>如<行号,"">,输出 list(<K2,V2>),将小数据集进一步解析成一批<key,value>对,每一个<k1,v1>会输出<K2,V2>是中间结果
reduce输入<k2,list(v2)>如<"a",<1,1,1>>输出<k3,v3>说明:输出的中间结果<k2,list<k2>>中的list(v2)表示的是一批属于同一个k2的value
4.mapreduce的工作流程
输入分片
进行map计算之前,根据输入文件计算输入分片,输入分片中存储的是分片的长度和记录数据的位置,分片的大小一般根据块的 大小来规定
map过程
map过程是利用函数来进行操作,本地化操作也都是在数据存储节点上进行操作的
combiner过程
在map操作计算出中间值之前对key值做一个简单的合并重复key的操作
shuffle过程
将map的输出过程作为reduce输入过程的操作
reduce过程
函数化,最终的结果存储在hdfs上
5.mapreduce的运行机制
在Hadoop中,一个MapReduce作业会把输入的数据集切分为若干独立的数据块,由Map任务以完全并行的方式处理
框架会对Map的输出先进行排序,然后把结果输入给Reduce任务。
作业的输入和输出都会被存储在文件系统中,整个框架负责任务的调度和监控,以及重新执行已经关闭的任务
MapReduce 框架和分布式文件系统是运行在一组相同的节点,计算节点和存储节点都是在一起的