MapReduce
MapReduce是Google提出的一种并行计算框架:
Map:映射,对一些独立元素组成的列表的每一个元素进行指定的操作。每个元素都是被独立操作的,而原始列表没有被更改。Map操作是可以高度并行的,这对高性能应用以及并行计算领域的需求非常有用。
Reduce:化简,对一个列表的元素进行适当的合并,虽然它不如Map那么并行,但是因为化简总是有一个简单的答案,大规模的运算相对独立,所以化简函数在高度并行环境下也很有用。
适合:大规模数据集的离线批处理计算;任务分而治之,子任务相对独立
不适合:实时的交互式计算,要求快速响应和低延迟,比如BI;流式计算、实时分析,比如广告点击计算;子任务之间相互依赖的迭代计算
不适合:实时的交互式计算,要求快速响应和低延迟,比如BI;流式计算、实时分析,比如广告点击计算;子任务之间相互依赖的迭代计算
开发完一个MapReduce作业后,即可开始调试运行。如果使用的是旧版API,使用JobClient.submitJob()或JobClient.runJob()方法来运行。
如果使用的是新版API,使用Job对象的submit()方法运行,也可以使用waitForCompletion(),它用于提交以前没有提交过的作业,并等待它的完成。
至于作业以什么机制运行,取决于core-site.xml中的一个参数 mapreduce.framework.name,该参数可设置为local(默认)、classic或yarn:中模拟MapReduce机制,没什么好讲的。
1、当取local时,表示用本地作业运行器来运行,相当于一个单机模式集群,会在一个JVM中模拟MapReduce机制。
2、当取classic时,表示用经典MapReduce机制运行,即MRv1。
3、当取yarn时,表示用2.x后的资源管理器YARN来控制运行,即MRv2,我们详细介绍这种。
经典MapReduce的运行机制,包含4个实体,分别是:
客户端,提交MapReduce作业;
jobtracker,协调作业的运行,主类为JobTracker;
tasktracker,运行划分后的任务,主类为TaskTracker;
分布式文件系统,一般为HDFS,用于在其他实体间共享作业的资源。