Hadoop----MapReduce

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

什么是计算, 什么是分布式计算?
    计算: 分析海量的数据, 从中分析出我们要的结果.
    分布式计算: 多台机器一起 协调 执行.


一、分布式计算的两种思路?

    思路1:
        分散 => 汇总, 各自做各自的, 互不相干, MapReduce就属于这种方式.
    思路2:
        中心化调度, 即: 1个大哥, 1帮小弟, 大哥指挥小弟干活.  例如: Spark, Flink就是这种.。

二、MapReduce的相关概述?

   它属于Hadoop框架的1个组件, 用于做 分布式计算的, 采用的是 分而治之的思想, 把大问题拆分成若干个小问题, 小问题解决了, 大问题也就解决了.
    例如: 计算1 ~ 1000之间所有质数和, 1个人算太慢, 可以找10个人一起算, 每个人负责100个数字区间的计算, 最后汇总结果即可.
    其中:
        MapTask任务负责:    拆分
        ReduceTask任务负责: 合并结果.

三.是不是所有的场景都适合用分而治之思想呢?

   不一定, 看需求, 如果拆分之后, 小任务之间的依赖度比较高,

   这个时候, 不建议使用: 分而治之思想.

四.请简述你对MR的核心8步的理解?

    1. 封装输入组件, 读取数据源, 获取K1, V1.
        K1: 行偏移量, 默认从 0 开始计数.
        V1: 整行数据
    2. 自定义MapTask任务, 负责: 拆分, 获取: K2, V2
    3. 分区.
        默认是 哈希取模分区法, 就是给数据打标记的, 标记着这个数据将来被哪个ReduceTask任务处理.
        默认只有1个分区, 即: 只有1个ReduceTask任务, 所以分区标记默认是: 0
    4. 排序.  默认按照K2, 进行升序排列.
    5. 规约.  默认对Map端的数据做局部合并, 目的是: 降低Reduce端拉取的数据量, 减少传输, 提高计算效率.
    6. 分组.  默认按照K2分组, 获取到: K2, V2的集合.
    7. 自定义的ReduceTask任务, 负责: 合并. 获取 K3, V3
    8. 封装输出组件, 把结果写出到目的地目录中.

细节:
    1. MapReduce程序中, MapTask负责: 分, ReduceTask负责: 合.
    2. 1个切片(默认和Block大小1样, 128MB) = 1个MapTask任务 = 1个分好区, 排好序, 规好约, 分好组的文件.
    3. 1个分区(默认只有1个分区) = 1个ReduceTask任务 = 1个最终的结果文件.
    4. 如果简单划分, MapReduce程序由 Map阶段 和 Reduce阶段组成,
       如果详细划分, MapReduce程序由 Map阶段, Shuffle阶段(指的是: 分区, 排序, 规约, 分组) Reduce阶段组成.
    5. Hadoop是1个IO(Input输入/Output输出)密集型框架, 涉及到大量的 内存 和 磁盘之间的交互, 所以Hadoop(MapReduce)计算效率相对较低.

五.请简述MR的执行流程.

   1. MR程序由MapTask任务(负责拆分) 和 ReduceTask任务(负责合并)组成, 其中:
        1个切片(默认和Block块大小一致, 128MB) = 1个MapTask任务 = 1个分好区, 排好序, 规好约, 分好组的文件.
        1个分区 = 1个ReduceTask任务 = 1个最终的结果文件.
    2. 先对文件进行切片, 每个切片由1个MapTask任务(线程)来处理, 且MapTask是逐行从该切片中读取数据, 逐行处理的.
    3. MapTask任务会将处理后的数据放到环形缓冲区中(默认大小: 100MB, 溢写比: 0.8), 当达到80%的时候, 就会触发溢写线程(Spill),
       将该部分数据(80M)写到磁盘, 形成 磁盘小文件.
    4. 随着MapTask不断的处理, 不断的一些, 磁盘小文件不断的增加, 当该切片的数据处理完毕后, MapTask任务会对这些磁盘小文件做合并,
       默认: 10个/次, 最终形成 1个分好区, 排好序, 规好约, 分好组的文件.
    5. 接下来就是ReduceTask任务的事儿了, 它会开启1个拷贝线程(Copy), 从上述的(多个)文件中, 拉取属于自己分区的数据(根据分区编号识别),
       然后做合并, 排序, 统计, 获取最终结果.
    6. 将ReduceTask任务处理后的结果数据, 写到磁盘文件中, 至此: MR程序执行完毕.


总结

        Hadoop MapReduce框架在大数据处理领域具有重要的地位,通过其并行计算的能力和良好的扩展性,为处理海量数据提供了有效的解决方案。随着Hadoop生态系统的不断发展,MapReduce虽然逐渐被更先进的计算框架所取代,但其思想和理念仍然对大数据处理领域产生着深远的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值