MapReduce
核心架构思想:先分再合,分而治之。
出MapReduce处理的数据类型是
键值对
。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表示执行单词统计任务;
第二个参数:指定输入文件的路径;
第三个参数:指定输出结果的路径(该路径不能已存在);
执行结果的web显示
1.txt内容:hello world
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
hello world
dog fish
hadoop
spark
wordcount执行图:
shuffle
机制弊端
Shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在。
Shuffle也是MapReduce被诟病最多的地方所在。MapReduce相比较于Spark、Flink计算引擎慢的原因,跟 Shuffle机制有很大的关系。
Shuffle中
频繁涉及到数据在内存、磁盘之间的多次往复
。