您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 基于Hadoop的MapReduce分析
基于Hadoop的MapReduce分析张龙目录•1MapReduce编程模型•2MapReduce能做什么,不能做什么•3Hadoop-MapReduce技术简介•4Hadoop-MapReduce程序性能调优•5下一代MapReduce(YARN/MRv2)1MapReduce编程模型2MapReduce能做什么,不能做什么•MapReduce借用函数式语言的映射(Map)和规约(Reduce)原语,通过自动切分输入数据集,在独立的数据切片上应用Map操作产生中间结果的键值对(key/valuepair)集合,然后通过分区操作(partition)确保具有同样键的数据映射到同一分区中并借助shuffle在无共享的集群中传递中间结果,最后在不同的中间结果分区中引用Reduce操作产生最终的规约结果。这种编程方式并不优雅!2MapReduce能做什么,不能做什么•MapReduce编程规范中有一个重要假设:Mapper和Reducer过程不存在任何依赖,可以无交互的在不同的数据切片上独立执行。易并行模型(EmbarrassinglyParallelComputation,EPC)对于矩阵运算,大图运算。这种编程模型,无能为力。2MapReduce能做什么,不能做什么解决办法:BulkSynchronousProgramming,BSP大同步编程模型3Hadoop-MapReduce技术简介3Hadoop-MapReduce技术简介1分布式并行计算MapReduce框架是由JobTracker和TaskTracker两类服务调度的。JobTracker是主控服务,只有一个,负责调度和管理TaskTracker,把Map任务和Reduce任务分配给空闲的TaskTracker,使这些服务并行运行,并监控任务的运行情况。TaskTracker是从服务,可以有多个,负责执行任务。如果某个TaskTracker执行失败或者出现故障,JobTracker将这一任务分发给其他空闲的TaskTracker中。2本地计算通常,MapReduce框架和分布式文件系统是运行在一组相同的节点上的,这样配置,允许框架在那些存储数据的节点上高效的调度任务,避免带宽的浪费。3Hadoop-MapReduce技术简介3Combinecombine过程将map任务输出的有相同key值的多个key,value组合成一个key,list(value)。很多情况下,combine可以直接使用reduce函数,combine能减少中间结果的数量,从而减少数据传输的网络流量4Partitioncombine过程之后,把产生的中间结果按照key的范围划分成R份。通常采用hash函数完成,hash(key)modR,这样保证一定范围内的key值,一定由某一个reduce任务完成,简化了Reduce过程。5读取中间结果Map阶段的中间结果,会以文件形式保存在本地磁盘。中间结果的位置会通知给JobTracker,JobTracker再通知Reduce任务到哪一个DataNode上去取中间结果。4Hadoop-MapReduce程序性能调优4.1从应用程序角度进行优化4.1.1避免不必要的reduce任务。对于4.1.2外部文件引入,可以将文件通过DistributedCache放入缓存中,以在多个task之间共享文件。例子:JNI,索引文件,基本数据的共享4.1.3考虑combiner例子:最终处理的数据需要按key值排序存储。4.1.4根据处理数据的特征,选择合适的数据类型。Text对象使用起来很方便,但它在由数值转换到文本或是由UTF8字符串转换到文本时都是低效的,且会消耗大量的CPU时间。当处理那些非文本的数据时,可以使用二进制的Writable类型,如IntWritable,FloatWritable等。二进制writable好处:避免文件转换的消耗;使maptask中间结果占用更少的空间。4.1.5使用StringBuffer而不是String4Hadoop-MapReduce程序性能调优•4.2从参数进行调优Hadoop目前有190多个配置参数,其中大约有25个对hadoop应用程序效率有显著的影响。MapReduce相关配置io.sort.mbio.sort.spill.percentmapred.child.java.optsmapred.compress.map.output/Mapred.output.compress5下一代MapReduce(YARN/MRv2)•Hadoop0.23.0是一个通用的资源分配框架,它不仅支持MapReduce计算框架,同时也支持流式计算框架,迭代计算框架。它实现时采用基于了事件驱动机制,异步编程模型,如下图所示:EventHandler被称作事件处理器,每种事件类型对应一种EventHandler,其对事件的处理过程通过状态机来描述,handler接收到一个事件后,使处理对象当前状态跳转到另外一个状态,同时触发一个动作。下一代MapReduce(YARN/MRv2)•状态机:每个对象被建模成有限状态机下一代MapReduce(YARN/MRv2)•基于actorsmodel的事件模型[1]每一个计算实体可以:1向其他actor发送有限个信息2收到的消息时触发一个行为3创建若干个新的actor[2]固有的并行性[3]异步的MapReduce的形式化表示}...1|),{()_,_(:kjvaluekeyvalueinkeyinMapjj)_,(]),...,[,(:Re1valuefinalkeyvaluevaluekeyducem以wordcount为例:MapReduce:{key1,value1,key1,value2,key2,value3,key2,value4}-{key1,sum(value1+value2),key2,sum(value3+value4)}shuffle过程具体实现•shuffle过程:描述的是数据从MapTask输出到ReduceTask输入这一过程。MapTask中的shuffle阶段shuffle过程具体实现•Reduce阶段的shuffle过程使用到combiner的地方Combiner会优化MapReduce的中间结果,所以它在整个模型中会多次使用•Mapshuffle中的spill阶段•Mapshuffle中的merge阶段•Reduceshuffle中的merge阶段
本文标题:基于Hadoop的MapReduce分析
链接地址:https://www.777doc.com/doc-2569924 .html