hadoop mapreduce流程

  • input split个数等于map任务个数
    默认情况下,输入片(input split)的大小与数据块(block)的大小相同。
  • 已经知道一个input split对应一个map任务, 接下来会对输入片里的记录逐条调用map方法。有多少个键值对,就调用多少次map方法。每一个调用map方法会输出零个或者多个键值对。
  • map方法里的context.write不是直接写入文件,而是先写入环形缓冲区,环形缓冲区里的数据会进行排序。
  • 当缓冲区里的数据达到阈值的时候,需要进行溢写操作。每次溢出都会产出一个溢出数据文件,因此会有多个。
  • 每一个溢出数据文件内分区,并且区内排好序
  • 对各个溢出数据文件进行合并得到一个整体的结果文件,分区且有序
  • 如果写有combiner方法,会执行归约处理
  • 有多少个partition(分区)就有多少个reduce任务,就会产生多少个最终输出文件
  • 每个reducer任务从多个map任务获取属于自己分区的输出
  • 合并成一个大的数据文件,有序
  • 把相同key的数据放到一组
  • 有多少组就调用多少次reduce方法,每次调用产生零个或者多个键值对,写入HDFS文件中
  • 每个reducer任务的结果写入一个输出文件中

[1]https://blog.csdn.net/zhangt85/article/details/42077281
[2]https://blog.csdn.net/u013521220/article/details/78794980#commentBox

猜你喜欢

转载自blog.csdn.net/YQMind/article/details/84728741