MapReduce(分布式数据计算模型)
MapReduce是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
我们知道MapReduce诞生与搜索邻域,主要解决的是海量数据处理扩展性差的问题。
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它们的主要思想,都是从函数式编程语言里借来的。每次一个步骤方法会产生一个状态,这个状态会直接当参数传进下一步中。而不是使用全局变量。
1、MapReduce框架
MapReduce将复杂的,运行大规模集群上的并行计算过程高度地抽象两个函数:Map和Reduce
MapReduce采用“分而治之”策略,将一个分布式文件系统中的大规模数据集,分成许多独立的分片。这些分片可以被多个Map任务并行处理。
MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,原因是,移动数据需要大量的网络传输开销
MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave,Master上运行JobTracker,Slave运行TaskTracker,Hadoop框架是用JAVA来写的,但是,MapReduce应用程序则不一定要用Java来写。
JobTracker:初始化作业,分配作业,TaskTracker与其进行通信,协调监控整个作业。
TaskTracker:定期与JobTracker通信,执行Map和Reduce任务。
HDFS:保存作业的数据、配置、jar包、结果。
2、作业调度算法
FIFO调度器(默认)、公平调度器、容量调度器
TaskTracker和JobTracker之间的通信与任务的分配是通过心跳机制完成的;
TaskTracker会主动向JobTracker询问是否有作业要做,如果自己可以做,那么就会申请到作业任务,这个任务 可以使Map也可能是Reduce任务;
TaskTraker将代码和配置信息到本地;
分别为每一个Task启动JVM运行任务