大数据学习笔记-2020-09-12--MR常用组件与MR数据处理流程

MR中常用组件的介绍

  • Mapper:map阶段核心的处理逻辑
  • Reducer:reduce阶段核心的处理逻辑
  • InputFormat:输入格式
    • MR程序必须指定一个输入目录和一个输出目录
    • InputFormat代表输入目录中的文件格式
      – 如果是普通文件,可以用FileInputFormat
      – 如果是SequenceFile(hadoop提供的一种序列化文件格式),可以使用SequenceFileInputFormat
      – 如果是数据库中的数据,需要使用DBInputFormat
      – 也可以自定义InputFormat
  • RecordReader:记录读取器
    • RR负责从输入目录中读取数据,然后封装为一组记录。
    • RR对象一般由InputFormat创建
  • OutputFormat:输出格式
    • OutputFormat代表MR处理后的结果,以什么样的文件格式写出
      – 将结果写出到一个普通文件中,可以使用FileOutputFormat
      – 将结果写出到数据库中,可以使用DBOutputFormat
      – 将结果写出到SequenceFile,可以使用SequenceFileOutputFormatS
      – 也可以自定义OutputFormat
  • RecordWriter:记录写出器
    • RW负责将处理的数据以指定的格式写出到输出文件中
  • Partitioner:分区器
    • 负责在Mapper将数据写出,将输出的k-v对打上标记,进行分区
    • 便于一个ReduceTask只处理一个分区的数据

MR中的数据处理流程

  1. InputFormat调用RecordReader,从输出目录的文件中,读取一组数据,封装为输入的k-v对对应的对象
  2. 将封装好的k-v对交给mapper的map方法,将处理的结果写出到map输出的k-v对中
  3. ReducerTask启动Reducer,使用Reducer的reduce方法处理Mapper写出的k-v
  4. OutputFormat调用RecordWriter,将reduce处理后的数据写出到文件中
MR数据处理流程举例
  • 假设有两个文件:

    ./a.txt 200MB

    ./b.txt 100MB

  1. Map阶段运行mapTask,将一个大的任务切分为若干个小的任务处理输出的结果

    切片:默认的切片方式以文件为单位,切片大小即为块大小(128M)进行切片,故上述文件可以切分为以下三片:

    split0:128M a.txt 0M-128M

    split1:72M a.txt 128M-200M

    split2:100M b.txt 0M-100M

  2. 运行mapTask进程,每个MapTask负责一个切片数据

    split0:MT1

    split1:MT2

    split2:MT3

  3. 读取数据阶段

    在MR中,所有的数据都必须被封装为k-v对的形式

    • mapTask的1,2,3都会初始化一个InputFormat(默认为TextInputFormat),每个InputFormat对象负责创建一个RecordReader(默认为LineRecordReader)对象
    • RecordReader负责从每个切片的数据中读取数据封装为k-v对
      • LineRecordReader将偏移量作为key,将行的内容作为value
  4. 进入Maooer的map阶段

    • 将数据依据map方法中的代码逻辑处理,输出k_out-v_out
  5. 针对不同的数据,分区器会将数据进行分区,有几个分区就有几个ReduceTask

    • 在reduceTask阶段

      1)copy:启动shuffle进程,从mapTask中拷贝相应分区的数据

      2)sort:只负责为每个对应的分区数据进行归并排序

      3)合并数据

      4)调用OutputFormat中的RecordWriter将reducer输出的记录写出到文件中

  6. 至此,完成一次MR任务的数据处理流程

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