MapReduce基础入门

1、Hadoop四大组件

    HDFS:分布式存储系统
    MapReduce:分布式计算系统
    Yarn:Hadoop的资源调度系统
    Common:以上三大组件的公共基础部分,用于提供工具包和RPC框架等。
    (注:RPC:远程过程调用,RPC能够让本地应用简单、高效地调用服务器中的过程(服务))

2、什么是MapReduce

        MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。
        在上面的MapReduce定义里可以找出几个关键点:
         一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。
        MapReduce主要思想: 分久必合
        MapReduce核心思想: 相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算

3、为什么使用MapReduce

        MapReduce致力于解决大规模数据处理的问题,利用局部性原理将整个问题分而治之。在处理之前,将数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(Map),将处理后的数据进行合并(Combine)、排序(Shuffle and Sort)后再分发至(Reduce节点),避免了大量数据的传输,提高了处理效率。

4、MapReduce原理

MapReduce基础入门_第1张图片

    4.1、map task

         首先,map task将处理后的每一条数据打上标签
        (打标签的目的:让这一条数据知道将来被哪一个reduce mask处理。打标签的作用:分区)
        (分区是由分区器完成的,默认分区器为:HashPartitioner。分区策略为:根据key的hashcode和map reduce的数量取模)
        mask task将数据一条条的读到内存中(进入buffer后的每一条数据由三部分组成:分区号、key、value。),当内存中的数据满80M后,会将这80M内存封锁,之后对这80M数据进行一个小聚合(combiner)。在进行聚合时,会同时对这些数据进行排序(排序依据:分区号,key)。将相同分区的数据放在一起,并且分区内根据key排序。
        当conbiner和sort完毕后,就可以了溢写数据到磁盘上。此时的形成的磁盘文件就是已经分好区的并且内部有序的文件。每进行一次溢写都会产生一个磁盘小文件。
        map task计算完毕后,会将磁盘上的小文件合并成一个大文件。在合并的时候利用归并排序算法,将一个个的小文件整合成一个有序的大文件。
        每一个map task都会进行刚才所进行的一切过程,也就是说每一个map task都会产生一个有分区的并且分区内部有序的大文件。

    4.2、reduce task

        去map task读取响应的分区数据,将读取到的分区数据写入到内存中,内存满了就会封锁该分区,进行小聚合并且排序,然后溢写成一个小文件,当所有文件读取完毕,会通过归并排序将这些小文件combiner成一个有序的大文件。
        (为什么要产生一个大文件?为了提高分组效率。归根结底,这四次排序都是为了提高分组效率)
        每一组数据都会调用reduce函数,产生一个结果(相同key的数据为一组)。

5、Hadoop1.x

    5.1、JobTracker(资源调度主节点和任务调度主节点)

         JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。主要任务如下:
        (1)、作业控制:在hadoop中每个应用程序被表示成一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块则负责作业的分解和状态监控。
        (2)、状态监控:主要包括TaskTracker状态监控、作业状态监控和任务状态监控。主要作用:容错和为任务调度提供决策依据。
        (3)、JobTracker只有一个,他负责了任务的信息采集整理,你就把它当做包工头把,这个和采用Master/Slave结构中的Master保持一致。
        (4)、JobTracker 对应于 NameNode。
        (5)、一般情况应该把JobTracker部署在单独的机器上。

    5.2、TaskTracker(负责任务运行)

        TaskTracker是JobTracker和Task之间的桥梁。TaskTracker与JobTracker和Task之间采用了RPC协议进行通信。 主要任务如下:
        (1)、从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等。
        (2)、将本地节点上各个任务的状态通过心跳周期性汇报给JobTracker,节点健康情况、资源使用情况,任务执行进度、任务运行状态等。
        (3)、TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。
        (4)、TaskTracker都需要运行在HDFS的DataNode上。
        (5)、TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。

6、Hadoop2.x

        Hadoop1.x使用JobTracker进行资源与任务的调度,会出现如下问题:
        1、负载过高,容易出现故障。
        2、与MapReduce的耦合度太高,如果spark也要运行在这套框架上,需要自己去实现,这个集群就存在两套资源调度器。会出现资源隔离与资源抢夺问题。

        为了避免上述问题Hadoop2.x使用了yarn(资源调度器)主从架构。
        MapReduce基础入门_第2张图片
        使用yarn之后资源请求流程如下:
        1、拿到application计算文件的路径找NameNode获取每个文件的位置。
        2、找ResourceManager为ApplicationMaster申请资源。
        3、接收客户端的申请,然后查看那一个节点上资源充足,如果大部分节点的资源充足,那就随机找一台节点启动Container容器。
        4、假设上一步决定在node01节点上启动一个Container容器(包括内存资源和cpu资源)。那么node01节点就会规划出一片Container区域。然后在该区域启动一个ApplicationMaster进程(主要负责任务调度)。
        5、Client客户端会将生成的报表交给刚刚启动的ApplicationMaster进程。
        6、ApplicationMaster拿到报表后,会根据报表去找ResourceManager为该作业所有的map task 和 reduce task申请资源。
        7、ResourceManager为任务分配了资源后,ApplicationMaster会把map mask和reduce task分发到各个yarn-child中执行。
        (ApplicationMaster负责启动map和reduce任务,监控。并在所有任务完成后,向ResourceManager注销自己,清理工作状态。)

你可能感兴趣的:(yarn,Hadoop生态圈)