zoukankan      html  css  js  c++  java
  • 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通知用户程序整个作业完成,显示必要信息。
                                  
                                       
  • 相关阅读:
    《架构之美》读后感(一)
    《架构即未来》读后感(三)
    《架构即未来》读后感(二)
    《架构即未来》读后感(一)
    《架构漫谈》读后感(三)
    《架构漫谈》读后感(二)
    SOA
    软件杯-视频全量目标分析和建模需求分析说明
    阅读笔记一线架构师实践指南03
    阅读笔记一线架构师实践指南02
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/4378982.html
Copyright © 2011-2022 走看看