MapReduce编程

来源:互联网 发布:数码宝贝进化图鉴软件 编辑:程序博客网 时间:2024/06/04 18:08

 MapReduce:一种分布式计算的模型的框架,解决海量数据的计算问题

MapReduce将整个并行计算过程抽象到两个函数

        1  Map(映射):对一些独立元素组成的列表的每一个元素进行指定的操作,可以高度并行

        2 Reduce(化简):对一个列表的元素组进行合并


一个简单的MapReduce程序只需要指定map(),reduce(),input和output,剩下的事情交给框架处理,简单的处理流程图如下:


   MapReduce的系统架构图如下:


                 


JobTracker: 负责接受用户提交的作业,负责启动,跟踪任务执行。

TaskTracker:负责执行JobTracker分配的任务,管理各个任务在每个节点上的执行情况。

Job:用户的每一个请求称为一个作业

Task:每一个作业都需要拆分开来,交由多个服务器来完成,拆分出来的执行单位,就成为任务

Task分为MapTask和ReduceTask两种,分别进行Map和Reduce操作,依据Job设置的Map类和Reduce类


    




MapReduce执行的流程

    一   map处理流程:

    1. 读取文件内容,解析成key,value对,对输入文件的每一行解析成key,value对。每一个键值对调用一次map函数。

    2. 写自己的逻辑,对输入的key,value进行处理,转换成新的key,value输出。

    3. 对输出的key,value进行分区。

   4. 对不同分区的数据,按照key进行排序,分组。相同key中的value放在一个集合里。

   5. (可选)分组后的数据进行归纳。

 

   二 reduce任务处理流程

    1. 对多个map任务处理的输出,按照不同的分区,通过网络copy到不同的reduce节点

    2. 对多个map任务的输出进行合并,排序。写reduce函数自己的逻辑,对输入的key,value处理,转换成新的key,value输出。

   3. 把reduce的输出保存到文件中去


MapReduce将整个运行分为两个阶段:

     Map阶段和Redduce阶段

Map阶段由一定数量的MapTask组成

       输入数据的格式解析:InputFormat

       输入数据处理:Mapper

       数据分组:Partitioner

Reduce阶段由一定数量的ReduceTask组成

       远程拷贝

       数据按key进行排序

       数据处理:Reducer

       数据输出格式:OutputFormat


编写MapReduce的模板:

      




0 0