Hadoop之MapReduce

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

MadReduce概要

定义 : 是一个分布式运算程序的编程框架,是 Hadoop 内部编写的。

功能 : 用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

优缺点:

优点:
1.易于编程 — 底层实现了接口
2.良好的扩展性 — 可增加节点
3.高容错性 — 保证任务的完成
4.适合PB级别以上的海量数据的离线处理 — 可实现服务器内节点并发工作
缺点:
1.不擅长实时计算 — 无法做到毫秒或者秒级内返回结果
2.不擅长流式计算 — MR 的输入数据集是静态的,流式计算的输入数据是动态的
3.不擅长DAG(有向图)计算 — 不建议使用,会导致MR一直写入到磁盘造成大量磁盘IO,影响性能

整体架构流程

MR 主要分成 map 和 reduce 两个阶段,核心思想就是**“分而治之”。Mapper主要负责“拆分”,即把复杂的任务分解成若干个“小任务”进行处理。 Reduce 阶段是将 Mapper 阶段得到的结果进行汇总**。


 

总结: map先分reduce后合(分而治之)
(1) 首先待计算的数据在client端生成切片(逻辑上对数据进行划分) , 生成的切片个数对应着要启动多少个MapTask程序进行Map阶段的计算。
(2) 多个MapTask程序是并行运行的,互不相干。
(3) 在每个MapTask中对数据的处理要考虑到很多细节, 是否有分区, 如何排序, 数据如何写磁盘等。
(4) 多个MapTask计算完成后,每个MapTask都会有输出的数据。
(5) 会根据分区的个数决定启动多少个ReduceTask(逻辑上来说), 实际上是 启动多少个ReduceTask就会生成多少个分区。
(6) 每个ReduceTask会到每个MapTask中拷贝自己所要处理的数据,说白了就是对应的分区的数据。
(7) 每个ReduceTask最终也会输出最后的结果。

 

小结:

大致流程:

通过inputformat实现类把数据输入,经过split切分成多份。
read从输入的inputsplit解析key/value,把解析后的key / value 交给map函数处理,得到**新的key / value **。在处理过程中会将生成的key / value 分区(调用partitioner),并写入环形内存缓冲区中,当环形缓冲区满之后(环形缓冲区默认100M,80%后反向)。处理完成之后,会对所有数据进行一次合并,通过outputformat实现类输出。
reduce会将map输出的数据进行读取(拷贝),在读取过程之中会把内存和磁盘上的文件进行合并,防止资源(内存、磁盘)使用过大。读取后会按照key进行局部排序,局部排序完成后在对所有数据做一次归并排序,最终使用reduce函数将结果输出到HDFS上。

你可能感兴趣的:(hadoop,mapreduce,大数据)