1.MRv1的几个缺陷

        扩展性受限

        单点故障

   难以支持MR(离线计算框架)之外的计算,如Storm(实时计算框架)、Spark(内存计算框架)

2.Resource Manager

        整个集群通常只有一个(HA可两个),负责集群资源的统一管理和分配

        处理客户端请求

        负责启动和监控ApplicationMaster,并在失败时重启AM

        监控NodeManager

        对系统总资源进行管理与分配

3.NodeManager

        集群中多个,负责单节点资源管理和使用

        负责单个节点上的资源管理和任务管理

        定时向RM汇报本节点上的资源使用情况以及各个Container的运行状态

        处理来自ApplicationMaster的请求

4.ApplicationMaster

        每个应用程序只有一个,负责应用程序的管理

        将任务分配成更多的内部任务

        向RM申请与领取资源

        与NM通信以启动/停止内部任务

        负责监控应用的执行状态

        负责重新启动执行失败任务

5.Container

        对任务运行环境的抽象

        描述一系列信息:

                任务运行资源(节点,内存,cpu)

                任务启动命令

                任务运行环境

6.Yarn运行过程:

        1.client向RM提交任务

        2.RM告知某个NM在某个Container上启动AM

        3.AM向RM注册,以便RM管理

        4.AM向RM申请和领取资源

        5.AM判断使用什么计算框架,根据申请的资源分配Container,与NM通信要求启动task,如mapreduce框架中启动map task、reduce task

        6.NM在分配的Container上启动task

        7.AM通过RPC协议监控与管理task

        8.执行完成后,AM向RM注销并关闭

7.Yarn容错性:

        RM:存在单点故障(基于zookeeper实现HA)

        NM:失败后,RM将失败任务告知对应的AM,AM决定如何处理失败的任务

        AM:失败后,由RM负责重启,AM需处理内部任务的容错问题,AM会保存已运行完成的task,重启后无需重新启动

8.Yarn中的资源隔离

        支持内存与CPU两种资源隔离

        内存隔离:

            基于线程监控的方案

            基于Cgroups的方案

        CPU隔离:

            默认不对CPU进行隔离

            基于Cgroups的方案

10.Yarn上的几种计算框架

        离线计算框架:Mapreduce

        DAG计算框架:Tez 多个作业之间存在数据依赖关系,并形成一个依赖关系有向图

        流式计算框架:Storm

        内存计算框架:Spark

11.MapReduce的几个特点:

        易编程,良好的扩展性,高容错性

        适合海量数据的离线处理

12.MapReduce应用场景:

        简单的数据统计、搜索引擎建索引、海量数据查找、复杂数据分析算法实现

13.MapReduce的主要几个过程

        Input->splitting->mapping->shuffling->reducing->output

14.map阶段

        由一定数量的Map Task组成,而 Map Task通常包括input,splitting,mapping及shuffling的一部分

        spliting阶段:从HDFS的中输入数据,将各block对应成map task可读取的split(mapreduce中最小的计算单元,默认与block一一对应,可修改)。

        mapping阶段:对输入的split进行格式解析(InputFormat),解析成key/value对(key是行在文件中的偏移量,value是行内容)。

        一部分shuffling:

            通过MapReduce提供的Partitioner接口,决定map task输出的每条数据交给哪个reduce task处理,默认通过hash(key) mod R实现,用户可以根据需求自定义map task将生成的key/value对以及partition写入内存缓冲区

            通常我们在配置文件中设置缓冲区大小buffer size,同时设置一个溢写spill percent,当缓冲区的数据超过buffer size*spill percent时,启动一个spill线程这一部分数据写入磁盘中,溢写前先按key对其排序。并且可以同步地向buffer写入数据(剩余buffer size*(1-spill percent))

            如果设置了combiner(本机reducer),在spill到磁盘之前,运行combiner函数去合并相同的key对应的value,可以减少map task输出数据量(磁盘IO)及减少map->reduce网络传输数据量(网络IO)。hadoop文档中说明即使设置了combiner,也有可能不被执行

            每次溢写只能生成一个buffer size*spill percent的文件,map的结果通常由多个spill文件组成。系统使用merge函数对多个spill文件按key合并成一个文件,key/value变成key/group。

15.reduce阶段

        由一定数量的Reduce Task组成,每个reduce task包括一部分shuffling,reducing,output组成

         一部分shuffling:

            每个reduce task启动溢写数据copy线程(Fetcher)远程拷贝各个map task的最终溢出文件(保存在硬盘上)对应的数据。

            采用同map task中merge同样的过程,数据来源于不同的map task,不断对copy过来的数据进行merge,最终形成一个文件(可能保存在内存中,也可能保存在磁盘中)

        reducing:对merger后的最终文件进行数据处理reduce,执行编写的reduce函数,将结果写入HDFS中

16. mapreduce 2.XX配置文件/etc/hadoop/mapred-site.xml的几个主要参数

        mapreduce.framework.name  #yarn

        mapreduce.jobtracker.http.address  #master:50030

        mapreduce.jobtracker.address  #master:9001

        mapreduce.jobhistory.address  #JobHistory Server地址 master:10020

        mapreduce.jobhistory.webapp.address  #JobHistory Server Web界面地址 master:19888

        mapreduce.map.sort.spill.percent   #内存缓冲区溢出阀值 0.8

        mapreduce.task.io.sort.mb  #内存缓冲区大小  100

17.  数据本地性

        任务运行在它将处理的数据所在的节点,则该任务具有“数据本地性”

18.  推测执行机制:

        作业完成时间取决于最慢的任务完成时间,任务处理速度慢的任务,启动一个备用任务同时任务,谁先运行完,则采用谁的结果

        任务间存在严重的负载倾斜,不能启用

        特殊任务,比如向数据中心写数据,不能启动

19. mapreduce三种编程方式:

        java:最原始的方式

        hadoop streaming :支持多语言(shell、python等)

        hadoop pipes:支持c/c++