【Hadoop】数据处理----MapReduce

        

       Mapreduce 是一种处理海量数据的并行编程模型和计算框架。在hadoop中负责进行数据的处理分析。

 

工作原理:


       Mapreduce采用分治的算法,既处理的数据或任务需要满足一下两个条件:

      1,数据集可以分解成多个小的数据集;

      2,各个小数据集的结果汇集起来就是大数据集的结果。

 

        在分治的思想下,mapreduce被抽象出两个可自定义的函数:map负责将数据集或任务进行割分;reduce负责将割分数据集的结果汇集起来。其中Mapreduce框架负责协调处理。

 

 

       具体处理三过程:

       Map过程:继承mapper类进行数据的割分;

       Reduce过程:继承reduce类进行结果集的汇集;

       Mapreduce的job对象负责管理和协调:

 

       从逻辑实体的角度讲解mapreduce运行机制,这些按照时间顺序包括:输入分片(input split)、map阶段、combiner阶段、shuffle阶段(Shuffle描述着数据从map task输出到reduce task输入的这段过程。)和reduce阶段。

      实现类的顺序如下:

     1. Inputformat 类:

       帮助map函数将数据的数据集分割成一个个split,并且将split拆分为健值对(key,value)格式。

 

     2.Mapper类:

       实现map函数,将inputformat类生成的健值格式的数据作为中间结果进行输出。

 

      3. Combiner类:

       实现combine函数,合并中间结果(mapper类的输出)中具有相同key值的键值对。


     4.  Paritioner类:

      实现getPartition函数,用于在shuffle过程中按照key值将中间结果的数据分成R份,分配给Reducer处理。

 

      5. Reducer类:

       实现reduce函数,将中间结果进行结果合并。


     6.  OutputFormat类:

       输出最终结果。

 

 

 


       结构框架


       在Hadoop的MapReduce框架中主要涉及到两个组件:JobTracker和TaskTracker(HDFS中的组件是NameNode和DataNode)

【Hadoop】数据处理----MapReduce_第1张图片

                                                                                                        (百度用例图)

1)Client


         配置参数Configuration,并打包成jar文件存储在HDFS上,将文件路径提交给JobTracker的master服务,然后由master创建每个task将它们分发到各个TaskTracker服务中去执行。


2)JobTracker


       JobTracke负责资源监控和作业调度。JobTracker监控所有TaskTracker 与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点;同时,JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop 中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。

 

3)TaskTracker


       TaskTracker 会周期性地通过Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker 使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task 获取到一个slot 后才有机会运行,而Hadoop 调度器的作用就是将各个TaskTracker 上的空闲slot 分配给Task 使用。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用。TaskTracker 通过slot 数目(可配置参数)限定Task 的并发度。

 

4)Task


        Task 分为Map Task 和Reduce Task 两种,均由TaskTracker启动。HDFS 以固定大小的block 为基本单位存储数据,而对于MapReduce 而言,其处理单位是split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split 的多少决定了Map Task 的数目,因为每个split 只会交给一个Map Task 处理。

 


参考博客:http://www.cnblogs.com/dyllove98/archive/2013/06/08/3127526.html

 

你可能感兴趣的:(【Hadoop】数据处理----MapReduce)