MapReduce:分布式计算框架
MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.
Why MapReduce
如果想统计下过去10年计算机论文出现最多的几个单词,看看大家都在研究些什么,那收集好论文后,该怎么办呢?
方法一:单机执行
方法二:多线程招行
方法三:多个计算机执行
方法四:MapReduce计算框架执行
相关组件:
JobClient : 提交相关mapreduce任务给JobTracker
JobTracker:任务控制中心
TaskTracker:任务执行
整体流程
Map -> Combiner -> Shuffle -> Reduce
逻辑角度分析作业运行顺序:输入分片(input split)、map阶段、combiner阶段、shuffle阶段、reduce阶段
map阶段:即执行map函数。
Combiner阶段:这是一个可选择的函数,实质上是一种reduce操作。combiner是map的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作。
可以理解为在map任务在单机执行完毕后,可单独执行combiner操作
Shuffle阶段:map输出到reduce输入,包括:
1) map端的shuffle: 针对map输出的key进行排序又叫sort阶段。
2) reduce端的shuffle:复制数据和归并数据,最终产生一个有序的reduce输入文件。
Shuffle过程有许多可调优的参数来提高MapReduce的性能,其总原则就是给shuffle过程尽量多的内存空间。
Reduce阶段:即执行reduce函数并将结果存储到hdfs文件系统中。
相关python streaming代码示例