• MapReduce基础学习【博学谷学习记录】


    1.MapReduce思想

    1、MapReduce会将一个大的计算任务进行拆分,拆分成小任务,让这些小任务在不同的计算机中进行处理,最后再将这些小任务的结果记性整体汇总

    2、MapReduce分为两个阶段,一个Map阶段负责任务的拆分,一个是Reduce阶段,负责任务的汇总

    3、整个MapReduce工作流程可以分为3个阶段:map、shuffle、reduce。

    2.MapReduce的shuffle阶段

    2.1 分区

    1、分区就是分文件,本质是将不同的键值对,最后输出的不同的文件中,理解为将数据进行拆分
    2、实现的方式是;在Map阶段对k2打标记,标记相同的数据就会分到同一个分区,同一个分区的数据会被同一个redue拉取
    if(id % 2 == 0){
       return 0;
    }else{ 
      return 1;
    }
    3、如果设置了分区则会有多个文件输出,则需要有多个reduce,相同标记的K2数据会被同一个reduce
    处理,多个reduce就会产生多个结果文件

    4、partition原来就是map结束之后根据key值不同,自定义打个标签。然后再由不同的reducer拉一下。

    2.2 排序

    概述:

    1、MapReduce中只能根据K2进行排序
    2、如果想按照某个字段排序,则应该把这个字段包含在K2中

    注意要点:

    1、如果在MR中自定义Java类,则MR对该类有以下要求
      1) 要求该类必须能够被序列号 : 实现接口 Writable
      2) 如果该类作为K2,则要求该类必须指定排序规则,被排序: 实现WritableComparable接口
    2、Writable和WritableComparable关系
      public interface WritableComparable extends Writable, Comparable {}

    2.3 规约

    1、规约(Combiner)是MapReduce中的优化手段,将每一个Map的数据进行提前的聚合,减少Map端和Reduce端网络传输的数据量
    2、规约可以理解为Reduce的逻辑在每一个Map端先执行一遍

    3、Reduce是对所有的Map的数据进行汇总,而规约是对每一个Map的结果进行汇总

    4、Combiner只是一种优化手段,不能改变最终的执行结果

    2.4 分组 

    1、分组的作用就是去K2进行去重,然后相同K2的V2存入集合
    hello 1
    hello 1    -----分组--------> hello [1,1,1]  ----reduceTask----> hello 3
    hello 1

    2、MR默认的分组是根据K2来决定的,相同K2的数据会被分到同一组

    3、当默认的分组,不满足我们的需求时,我们可以使用自定义分组

    4、当我们没有指定分组规则时,系统默认调用K2类中的compareTo方法,如果我们自定义了分组规则,则就按照我们的方式来实现分组

  • 相关阅读:
    Java线程池隔离原理
    Python中Tkinter模块的Canvas控件使用学习(3:绘制工艺卡片)
    数仓埋点体系与归因实践
    JavaScript的Web api接口
    【JavaSe笔记】——final关键字,常量,抽象类的定义使用和特征
    第一章 Caché 服务器页面简介 - 什么是CSP
    超详细!linux系统nlg-eval安装指南
    adb突然获取不到华为/荣耀手机。。。
    【华为OD机试真题 python】 靠谱的车【2022 Q4 | 100分】
    算法刷题Day4 两两交换链表中的节点+删除链表的倒数第N个结点+链表相交+环形链表
  • 原文地址:https://blog.csdn.net/qq331570870/article/details/127036673