MapReduce 2.0应用场景、原理与基本架构

         现介绍计算框架MapReduce。MapReduce一个应用场景是有大量文件,里面存储了单词, 且一个单词占一行 。执行任务是如何统计每个单词出现的次数? 类似应用场景有搜索引擎中,统计最流行的K个搜索词以及统计搜索词频率,帮助优化搜索词提示 。

        MapReduce将作业的整个运行过程分为两个阶段 :Map阶段和Reduce阶段 

        Map阶段由一定数量的Map Task组成 :
        (1)、输入数据格式解析:InputFormat; 

        (2)、输入数据处理:Mapper ;

        (3)、数据分组:Partitioner 。

        Reduce阶段由一定数量的Reduce Task组成 :
        (1)、数据远程拷贝 ;

        (2)、数据按照key排序; 

        (3)、数据处理:Reducer; 

        (4)、数据输出格式:OutputFormat。 



           MapReduce的内部逻辑如上图所示。inputformat从hdfs上读取split进行解析,然后输出给mapTask。map阶段的输出写在磁盘上。Partitioner阶段将不同的map结果合理的分配到相应的ReduceTask。最后,通过Outputformat将结果写到HDFS上。

            Inputformat有很多继承类,实现将分片数据解析成key/value对。DBInputFormat用来读取数据库,FileInputFormat用来读取各种文件形式。还有一种空文件读取方式EmptyInputFormat。split和block是两个不同的概念。spilt是mapreduce中最小的计算单元。而block是HDFS存储的最小存储单元。其一一对应,都可以由用户任意指定。

           上图所示为combiner的作用,conbiner相当于一个本地的reducer操作。将相同key的map结果进行归并。在wordcount操作中conbainer可以将同一个map输出的相同word进行统计。Partitioner决定了Map Task输出的每条数据 交给哪个Reduce Task处理。 默认实现是hash(key) mod R 。其中,R是Reduce Task数目,允许用户自定义。很多情况需自定义Partitioner,比如“hash(hostname(URL)) mod R”确保相同域 名的网页交给同一个Reduce Task处理 。

            上图为mapreduce的调度原理之前已经讲解不在赘述。 Client 与MapReduce 1.0的Client类似,用户通过Client与YARN 交互,提交MapReduce作业,查询作业运行状态,管理作业等。  MRAppMaster 功能类似于 1.0中的JobTracker,但不负责资源管理。功能包括:任务划分、资源申请并将之二次分配个Map Task和Reduce Task、任务状态监控和容错。 MRAppMaster有较好容错性。一旦运行失败,由YARN的ResourceManager负责重新启 动,最多重启次数可由用户设置,默认是2次。一旦超过最高重启次数,则作业运行失败。Map Task/Reduce Task 周期性向MRAppMaster汇报心跳。一旦Task挂掉,则MRAppMaster将为之重新申请资源, 并运行之。最多重新运行次数可由用户设置,默认4次。 


           在任务执行过程中,应该保证数据的本地性。当不能同节点访问数据时,则会进行跨节点访问,减慢执行速度,增加网络传输负载。甚至跨机架访问数据延时会更严重。MapReduce的应用场景包括:简单的数据统计,比如网站pv、uv统计、搜索引擎建索引、海量数据查找、复杂数据分析算法实现。例如:聚类算法 、分类算法、推荐算法以及图算法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值