Hadoop之旅(4)— MapReduce 与 YARN 原理讲解

版权声明:本文为博主原创文章,可允许转载,但注明出处。 https://blog.csdn.net/JavaWebRookie/article/details/73521316

1、MapReduce 介绍

      MapReduce是一种可用于数据处理的编程框架。MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。

MapReduce如何分而治之呢?    map->“分”   ==》    reduce->“合并”  

在MapReduce过程详细:input  ->   map ->  shuffle   ->reduce -> output

      在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。


1.1、MapReduce结构图


     上图其实就是这句话: input  ->   map ->  shuffle   ->reduce -> output

       MapReduce运行模式:
                * 本地模式运行、例如(运行Hadoop JAR—运行参数—输入源—输出源)

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/root/chenzhengy
ou/mapreduce/wordcount/input /user/root/chenzhengyou/mapreduce/wordcount/output
                * yarn模式例如、(运行YARN JAR—运行参数—输入源—输出源)

bin/yarn jar jars/hadoop-mapreduce.jar /chenzhengyou/mapreduce/wordcount/input/wc.input /chenzhengyou/map
reduce/wordcount/output



1.2、MapReduce在YARN?




      1)用户程序 (JobClient) 提交了一个 job,job 的信息会发送到 Job Tracker 中,Job Tracker 是 Map-reduce 框架的中心,他需要与集群中的机器定时通信 (heartbeat), 需要管理哪些程序应该跑在哪些机器上,需要管理所有 job 失败、重启等操作。
      2)TaskTracker 是 Map-reduce 集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。
      3)TaskTracker 同时监视当前机器的 tasks 运行状况。TaskTracker 需要把这些信息通过 heartbeat 发送给 JobTracker,JobTracker 会搜集这些信息以给新提交的 job 分配运行在哪些机器上。
   
       从上图可以看出 YARN 帮助我们管理整个资源的管理和调度、管理每个节点的资源与调度,还有更好管理Hadoop生态圈技术、比如HIve、Hbase等。


1.3、 shuffle 过程



       MapReduce处理过程、其中Shuffle过程是MapReduce的核心、红色部分是shuffle的过程:

              在 input 阶段:
                            InputFormat (输入格式化):读取数据、转换成<key,value>
              在 map 阶段:
                            ModuleMapper:map(KEYIN,VALUEIN,KEYOUT,VALUEOUT)
              在 shuffle 阶段:
                            接收map的输出:output<key,value>
                            spill:溢写到磁盘中
                                     * 分区parttition、排序sort
                                     * 合并,merge、copy
              在 Reduce Task阶段:回到Map  Task运行的机器上,拷贝要处理的数据
                                     * 合并、merge、排序、分组group、将相同Key 的value放在一起






2、YARN 介绍

       MapReduce has undergone a complete overhaul in hadoop-0.23 and we now have, what we call, MapReduce 2.0 (MRv2) or YARN(官网的介绍)

        在hadoop 2.0版本中后,YARN引入了一种新的调度策略:基于标签的调度机制。该机制的主要引入动机是更好地让YARN运行在异构集群中,进而更好地管理和调度混合类型的应用程序。

YARN架构图

2.1、YARN 组件

         ResourceManager组件:整个集群资源的管理和调度、处理客户端请求、启动与监控ApplicationMaster、监控NodeManager 、资源分配与调度。

        NodeManager组件:管理每个节点的资源与调度、单个节点上的资源管理、处理来自ResourceManager的命令、处理来自己 ApplicationMaster的命令。

        ApplicationMaster组件(图App Mstr):数据切分、为应用程序申请资源,并且分配给内部任务、任务监控与容错。                  
        Container组件:对任务运行环境的抽象、把CPU、内存等资源以及环境变量、启动命令等任务运行相关的信息。

2.2、YARN 在Haoop生态圈



        可以看出 YARN 在 HADOOP 生态圈占有极大的地位、比如MapReduce、Tez等都运行在YARN在,统一的管理。虽然MapReduce没有YARN也可以运行操作、但是为了资源的调度与分配、更好的管理集群(实际一般都是集群),更好的协调合作。
        Hadoop是处理离线大量数据的、但是Spark是基于内存级别的计算框架,都知道Spark速度比hadoop快,各取优点。那么?谁来管理这个协调合作呢?这就是需要YARN来管理协调了。























猜你喜欢

转载自blog.csdn.net/JavaWebRookie/article/details/73521316