MapReduce基本原理
运算原理
首先以词频统计的案例,来描述一下MapReduce的运算原理与一些基本的概念。这里输入的数据是一些英文的文章,它有很多行组成,而每一行又包含很多单词,每个单词之间由空格隔开;现在需要使用MapReduce来统计每个单词的出现次数。
这里输入的案例数据比较少,只有三行,分别是 Deer Bear River 、 Car Car River 、 Deer Car Bear。
当数据被上传到HDFS的时候,会被自动拆分(以128M为标准)为Block存储,MapReduce在执行前,需要一个Splitting阶段来确定Map数量,默认情况下与Block数量保持一致,即Splitting阶段不做任何处理,直接沿用Block数量,然后直接在下一个阶段将计算任务移动到每个Block上即可。但Splitting真正存在的意义在于——自定义Map数量,如果需要更多的并发度,则还需要对存储在HDFS上的Block进行拆分,如果更少的并发,则对Block进行合并。
这里的Splitting使用默认情况,假设文件在被存储到HDFS时,被拆分了3个Block,每个Block分别存储了一行数据;那这里Splitting不做任何处理,即3个Split。
之后每一个Split数据块上便会启动一个Map任务,进入到Map阶段,