Hadoop--MapReduce 基本原理

MapReduce是Hadoop中的完成数据计算任务的核心框架

1. MapReduce 组成实体

     (1)Client节点:此节点上运行MapReduce程序和JobClient实例对象,负责提交MapReduce作业。

     (2)JobTracker:协调调度,主控节点,一个Hadoop集群仅有一个JobTracker节点

     (3)Map TaskTracker:执行 Map任务,一个Hadoop集群有多个TaskTracker节点

     (4)Reduce TaskTracker:执行Reduce任务,一个Hadoop集群有多个TaskTracker节点

     (5)HDFS,存储数据文件,配置文件

 

2. MapReduce 作业流程

    (1)作业启动

    (2)作业初始化

    (3)作业/任务调度

    (4)Map执行

    (5)shuffle

    (6)Reduce执行

    (7)作业完成

3. 作业流程分布讲解

   (1)作业启动:          

                                     由Client节点运行MapReduce程序,创建JobClient实例

                                                                    ↓

                                     JobClient向JobTracker发出请求,获得一个JobID,用于标识本次MapReduce作业

                                                                    ↓                

                                     JobClient将运行作业需要的相关资源(配置文件、输入数据分片数量、包含Mapper类和Reducer类的JAR文件)
                                     放入作业对应的HDFS目录, 计算分片数量和map任务数量
                                                                    ↓
                                     向JobTracker提交作业,并获得作业的状态对象句柄
 
   (2)作业初始化:    
                                                               切分数据
                                    对于多个JobClient的请求,JobTracker使用队列机制,由作业调度器进行调度 
                                                                     ↓
                                    JobTracker创建一个代表此作业的JobInProgress实例,用于后续跟踪和调度此作业
                                                                     ↓
                                    JobTracker从HDFS中获得输入数据的分片信息,决定创建Map任务的数量,并对应创建出一批TaskInProgress,以监控和调度Map任务
            
   (3)作业/任务调度:     
                                                                 
                                    TaskTracker向JobTracker 发送心跳消息,主动pull 任务
                                                                     ↓
                                    JobTracker向有闲置资源的TaskTracker派发任务
 
   (4)Map执行:
                                    TaskTracker从HDFS提取相关资源(Jar包、数据)
                                                                 ↓
                                    TaskTracker 创建一个TaskRunner实例运行Map任务
                                                                 ↓
                                   TaskRunner在一个单独的JVM中启动MapTask执行map函数
                                    (使用单独的JVM是为了避免MapTask的异常影响TaskTracker的正常运行)
                                                                 ↓
             定期存入缓存,缓存已满时存入本地磁盘
                                                                 ↓
                                    MapTask定期向TaskTracker报告进度
                                                                 ↓
                                                  输出键值对 word:1
 (5)Shuffle:
                                    汇总相同的key的1值信息,确保相同的key交由同一个reduce任务进行合并处理
 
 (6)Reduce:
                                     JobTracker分配Reduce任务
                                                      ↓ 
                                    创建ReduceRunner运行Reduce任务
                                                      ↓
                                    ReduceRunner在单独的JVM中启动ReduceTask执行reduce函数 
                                                      ↓
                                   从Map节点下载中间结果数据
                                                      ↓
                                   当所有Map任务完成后,JobTracker会通知所有的Reduce TaskTracker节点开始Reduce任务执行
                                                      ↓
                                   ReduceTask定期向TaskTracker报告进度
 
 (7)完成作业:             
                                   JobTracker通过每一个TaskTracker和其之间的心跳消息,全部任务完成
                                                      ↓
                                   JobClient轮询获知任务完成
                                                      ↓
                                   JobClient通知用户程序整个作业完成,显示必要信息。
                              
                                   

转载于:https://www.cnblogs.com/ivywenyuan/p/4378982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值