MapReduce
核心架构思想:先分再合,分而治之。
出MapReduce处理的数据类型是
<key,value>
键值对
。MapReduce内置了很多默认属性,比如排序、分组等,都和数据的k有关,所以说kv的类型数据确定及其重要的
分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。相对于集中计算。
MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。
特点:
易于编程、良好的扩展性、高容错性、适合海量数据的离线处理
局限性:
实时计算性能差、不能进行流式计算
一个完整的MapReduce程序在分布式运行时有
三类
1、
MRAppMaster
:负责整个MR程序的过程调度及状态协调
2、
MapTask
:负责map阶段的整个数据处理流程
3、
ReduceTask
:负责reduce阶段的整个数据处理流程
Reduce
阶段执行过程
第一阶段:ReduceTask会主动从MapTask
复制拉取
属于需要自己处理的数据。
第二阶段:把拉取来数据,全部进行
合并
merge
,即把分散的数据合并成一个大的数据。再对合并后的数据
排序 。
第三阶段是对排序后的键值
对调用
reduce
方法
。
键相等
的键值对调用一次reduce方法。最后把这些输出的键值对 写入到HDFS文件中。
wordcount实例:hadoop fs -mkdir /input
hadoop fs -put 1.txt /input
hadoop jar hadoop-mapreduce-examples-3.3.0.jar
wordcount /input /output
第一个参数:wordcount表示执行单词统计任务;
第二个参数:指定输入文件的路径;
第三个参数:指定输出结果的路径(该路径不能已存在);
![](https://img-blog.csdnimg.cn/1faa8932621342c6a78234831d937cc7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bKB5pyI5LiN6Z2Z5aW9NDU2,size_20,color_FFFFFF,t_70,g_se,x_16)
执行结果的web显示
1.txt内容:hello world
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
wordcount执行图:
![](https://img-blog.csdnimg.cn/739d8d9068774d6e959f474e8cdccf79.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bKB5pyI5LiN6Z2Z5aW9NDU2,size_20,color_FFFFFF,t_70,g_se,x_16)
shuffle
机制弊端
Shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在。
Shuffle也是MapReduce被诟病最多的地方所在。MapReduce相比较于Spark、Flink计算引擎慢的原因,跟 Shuffle机制有很大的关系。
Shuffle中
频繁涉及到数据在内存、磁盘之间的多次往复
。