zoukankan      html  css  js  c++  java
  • MapReduce架构与执行流程

    一、MapReduce是用于解决什么问题的?

    每一种技术的出现都是用来解决实际问题的,否则必将是昙花一现,那么MapReduce是用来解决什么实际的业务呢?

    首先来看一下MapReduce官方定义:

    总结一句话:MapReduce就是批量处理海量数据的分布式计算框架。

    在数据规模比较小时,如果要批量处理一些数据,通常都是在凌晨跑一个或者多个定时任务,定时任务直接连接业务库,从业务库中读取然后批量处理,但是当业务规模逐渐大了之后,像凌晨跑定时任务的方式已不足以支撑业务开展,这时分布式计算诞生了,分布式计算将一个很大的任务切分成很小的子任务,然后将子任务分发到集群上的节点上去执行,执行完之后在合并结果并对外提供服务,MapReduce就是用来解决这种业务场景的。

    二、MapReduce架构

    < 未完> 

    三、MapReduce执行流程

    执行流程说明:

    1. 如果在HDFS上存在一份数据,这份数据被分成4个Block存储(这里假设一个Block就是一个Record), 当MapReduce处理这份数据时,会启动4个Map Task去批量处理,输出的结果是键值对形式

    2. Map Task将输出结果写入内存缓冲区(memory buffer),并根据设定Reduce个数据对内存缓冲区里的数据做partition,这时候内存缓冲区的数据有键值对形式变成三元组的形式,如上图(Partition结果),三元组第一个元素为分区号,表示该行数据会分到哪个区。

    3. 做完partition之后接着就是sort, 这里排序有2次

      3.1 第一次排序:对分区号做排序

      3.2 第二次排序:对每个分区里的数据做排序

      2次排序之后得到的结果如上图中红框所示

    4. 如果Map Task输出的数据量很大,超过100M。当达到80M时spill线程会将结果溢写到磁盘,在磁盘上可能会产生很多个spill文件,

    5. 当所有的Map Task执行完之后,MapReduce框架将多个spill文件merge成一个大的文件,这个大文件也是分区好了的

    6. 这时TaskTracker通过心跳上报JobTracker, 告诉JobTracker Map Task任务已经跑完了,JobTracker将分配Reduce资源,然后TaskTracker将第5步骤里的大文件按分区号远程拷贝到Reduce机器上

    7. Reduce Task对Map Task输出的结果处理,然后生成处理结果写入到HDFS上。注意:一个Reduce Task产生一个文件。

  • 相关阅读:
    IOS手机 html5页面 数字变成蓝色链接的原因
    html5预加载图片的写法
    jquery取消绑定的方法
    CSS3幸运大转盘最简单的写法
    深度搜索应用之黑白图像(非递归)
    springday03-go1
    springday02-go4
    spring day02-go3
    springday02-go2
    spring da-y02-go1
  • 原文地址:https://www.cnblogs.com/jsnr-tdyd/p/7821534.html
Copyright © 2011-2022 走看看