• MapReduce(三)


    一:WritableComparable排序

    排序是MapReduce框架中最重要的操作之一。

    MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。

    默认排序是按照字典顺序排序,且实现该排序的方法是快速排序

    对于MapTask,它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使

    用率达到一定阈值后,再对缓冲区中的数据进行一次快速排序,并将这些有序数

    据溢写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行归并排序

    对于ReduceTask,它从每个MapTask上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则溢写磁盘上,否则存储在内存中。如果磁盘上文件数目达到一定阈值,则进行一次归并排序以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据溢写到磁盘上。当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行一次归并排序

    排序分类

    (1)部分排序

    MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部有序。

    (2)全排序

    最终输出结果只有一个文件,且文件内部有序。实现方式是只设置一个ReduceTask。但该方法在

    处理大型文件时效率极低,因为一台机器处理所有文件,完全丧失了MapReduce所提供的并行架构。

    (3)辅助排序:(GroupingComparator分组)在Reduce端对key进行分组。应用于:在接收的key为bean对象时,想让一个或几个字段相同(全部字段比较不相同)的key进入到同一个reduce方法时,可以采用分组排序。

    (4)二次排序在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。

     自定义排序WritableComparable原理分析

    bean对象做为key传输,需要实现WritableComparable接口重写compareTo方法,就可以实现排序。

    WritableComparable排序案例分析(全排序)

     代码实现:

    (1)FlowBean对象在在需求1基础上增加了比较功能

     (2)Mapper类中输出的key为FlowBean,value为Text(电话号码),其他代码不做改变

    (3)编写Reducer类

    (4)编写Driver类

    二:Combiner合并

    (1)Combiner是MR程序中Mapper和Reducer之外的一种组件。

    (2)Combiner组件的父类就是Reducer。

    (3)Combiner和Reducer的区别在于运行的位置,Combiner是在每一个MapTask所在的节点运行;

    (4)Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。

    (5)Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv

    应该跟Reducer的输入kv类型要对应起来。

    (6)自定义Combiner实现步骤

     三:OutputFormat数据输出

     

  • 相关阅读:
    Java培训之java8新特性程序代码
    springboot读取配置文件自定义参数和自定义配置文件参数
    1527. 患某种疾病的患者
    Linux 进程地址空间
    读书记:认知觉醒(二)模糊、感性
    vscode设置前进、后退快捷键
    【数仓】数仓建模理论及步骤,ER建模,维度建模,星形模型,雪花模型,数据分层
    日期类的实现
    使用coverlet统计单元测试的代码覆盖率
    OSI网络七层模型和TCP/IP模型
  • 原文地址:https://blog.csdn.net/JiaXingNashishua/article/details/125986985