mapredcue培训

上传人:第*** 文档编号:75271393 上传时间:2019-01-30 格式:PPT 页数:45 大小:3.21MB
返回 下载 相关 举报
mapredcue培训_第1页
第1页 / 共45页
mapredcue培训_第2页
第2页 / 共45页
mapredcue培训_第3页
第3页 / 共45页
mapredcue培训_第4页
第4页 / 共45页
mapredcue培训_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《mapredcue培训》由会员分享,可在线阅读,更多相关《mapredcue培训(45页珍藏版)》请在金锄头文库上搜索。

1、*,MapReduce培训 新大陆软件工程有限公司 商业智能部 席先广 2014年02月,*,目录,MapReduce程序的特征,MapReduce程序的编程模型,MapReduce基本概念,MapReduce优化,MapReduce错误处理机制,*,MapReduce基本概念,什么是MapReduce? MapReduce是运行在HDFS分布式文件系统上并行计算的框架,它是一种编程模型,用于大规模数据集的并行计算, MapReduce的主要思想是分而治之。 Mapper: 把源数据按照HDFS块大小(配置文件hdfs-site.xml中的dfs.block.size来设置)切分成很多片,每个

2、片(split)对应一个Mapper,所以mapper数量由输入文件决定的。确定好Mapper数量后,每个map读入各自片的数据,处理,然后以key,value的形式输出。不同的key值输出到不同的Reducer当中,*,MapReduce基本概念,Reducer: Reducer接收Map传过来的同一组key的数据后,调用Reduce函数进行业务逻辑处理,然后以key,value的形式输出到HDFS中。,*,目录,MapReduce程序的特征,MapReduce程序的编程模型,MapReduce错误处理机制,MapReduce基本概念,MapReduce优化,*,MapReduce程序的特征

3、,自动并行化以及分布式 提供状态以及监控工具 对于程序员提供清晰的编程接口 隐藏了大量的实现细节 程序员只要专注于用map和reduce函数实现应用逻辑,*,目录,MapReduce程序的特征,MapReduce程序的编程模型,MapReduce错误处理机制,MapReduce编程框架,MapReduce优化,*,MapReduce程序的编程模型,*,MapReduce程序的编程模型,*,没有Reduce的简单编程模型,*,复杂的编程模型,*,Mapper,Map-reduce的思想就是“分而治之” Mapper 负责“分”,即把复杂的任务分解为若干个“简单的任务”执行 “简单的任务”有几个含

4、义:1数据或计算规模相对于原任务要大大缩小; 2就近计算,即会被分配到存放了所需数据的节点进行计算; 3这些小任务可以并行计算,彼此间几乎没有依赖关系,*,Reducer,对Map阶段的结果进行汇总 Reducer的数目由mapred-site.xml配置文件里的项目mapred.reduce.tasks决定。缺省值为1,用户可以根据实际需求覆盖它,*,shuffler,在Mapper和Reduce中间的一个步骤(可以没有) 可以把Mapper的输出按照某种KEY值重新切分和组合成N份,把KEY值符合某种范围的输出送到特定的Reducer那里去处理 可以简化Reducer过程,*,MapRed

5、uce的例子WordCount,WordCount是MapReduce的HelloWorld程序 程序的目的是统计大量文档中每个单词出现的次数 程序具有实际的意义,即可以统计单词在文档集合中出现的频率,这是进行词语重要程度的基本统计,*,M-R实例,*,例子:流程原理图,*,例子:流程原理图,*,例子:流程原理图,*,代码实例:Mapper,*,代码实例:Reducer,*,代码实例:Main类,*,MapReduce编程总结,MapReduce极大简化了大规模数据处理的编程方法 通过简单的抽象,用户可以只针对自己应用程序的本身进行编码,而不需要考虑底层的系统细节 MapReduce编程框架自

6、动处理程序在大规模分布式系统中运行的细节,包括系统的扩展性以及可靠性,*,运行Word Count,运行hadoop自带的wordcount程序: hadoop jar /usr/lib/hadoop/hadoop-examples.jar wordcount /user/train/test/overview.txt /user/train/output,*,网络界面:http:/IP:5030/jobtracker.jsp,*,作业页面,*,作业页面,*,MAP任务页面,*,TASK任务页面,*,观看日志,*,观看参数列表,*,Map-Reduce工作机制,*,目录,MapReduce程序

7、的特征,MapReduce程序的编程模型,MapReduce优化,MapReduce编程框架,MapReduce错误处理机制,*,错误处理机制:硬件故障,硬件故障是指jobtracker故障或者tasktracker故障 Jobtracker是单点,若发生故障目前hadoop还无法处理,唯有选择最牢靠的硬件作为jobtracker Jobtracker通过心跳(周期1分钟)信号了解tasktracker是否发生故障或负载过于严重 Jobtracker将从任务列表中移除发生故障的takstracker 如果故障节点在执行map任务并且尚未完成,jobtracker要求其它节点重新执行此map任务

8、 如果故障节点在执行reduce任务并且沿未完成,jobtracker要求其它节点继续执行沿未完成的reduce任务,*,错误处理机制:任务失败,由于代码缺陷或者进程崩溃引起任务失败 JVM自动退出,向tasktracker父进程发送错误信息,错误信息也会写入到日志 Tasktracker监听程序发现进程退出,或者进程很久没更新信息送回,将任务标记为失败 标记失败任务后,将任务计数器减1以便接受新的任务,并通过心跳信号告诉jobtracker任务失败的信息 Jobtracker获悉任务失败以后,将该任务重新放入调度队列,重新分配出去再执行 如果一个任务失败超过4次(参数mapred.map.m

9、ax.attempts可以设置),将不会再执行,同时作业也宣布失败,*,出错恢复,任务进程定期向TaskTracker发送心跳 如果10分钟无心跳,则认为死亡。其JVM被TaskTracker杀死 如果任务出现Exception,那么被认为死亡 TaskTracker定期向JobTracker发送心跳 这是两者间惟一的通信机制,*,出错恢复,TaskTracker将完成的attempt,出错的attempt汇报给JobTracker JobTracker在心跳的reply中通知TaskTracker执行相应的动作 如果10分钟无心跳,则认为死亡。其正执行的所有任务被重新调度 如某个TaskTr

10、acker出现过高的任务失败比率,则这个TaskTracker会被JobTracker列入黑名单,*,目录,MapReduce程序的特征,MapReduce程序的编程模型,MapReduce错误处理机制,MapReduce编程框架,MapReduce优化,*,MapReduce程序的调优,尽量少用大对象:如Map,List 避免递归过深 尽量少用超长正则表达式:消耗性能,要在map或者reduce函数外编译表达式 不要大量的创建目录与文件 不要大量使用System.out.println,而使用Logger,*,MapReduce程序的调优,如果可能的话,不用Reduce 使用combiner

11、减少中间结果 每个Map任务处理的数据以128M1G左右为宜。 每个节点上的map slot + reduce slot个数应2*CPU个数,*,MapReduce调优 之Map个数,Map的数目通常是由输入数据的大小决定的,一般就是所有输入文件的总块(block)数 Input Split的大小,决定了一个Job拥有多少个map,默认input split的大小是64M(与dfs.block.size的默认值相同)。如果输入的数据量巨大,那么默认的64M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力

12、。用户可以修改参数mapred.min.split.size (大于默认才生效),从而改变map task的数量。 一个恰当的map并行度是大约每个节点10-100个map,且最好每个map的执行时间至少一分钟。,*,MapReduce调优 之Reduce个数,reduce任务的个数应该是0.95或者1.75 (节点数 mapred.tasktracker.reduce.tasks.maximum参数值)。如果任务数是节点个数的0.95倍,那么所有的reduce任务能够在 map任务的输出传输结束后同时开始运行。如果任务数是节点个数的1.75倍,那么高速的节点会在完成他们第一批reduce任务

13、计算之后开始计算第二批 reduce任务,这样的情况更有利于负载均衡。 CPU个数*每个CPU核数hadoop守护进程+MAP槽数+REDUCE槽数,*,任务执行优化,推测试执行:即如果jobtracker发现有拖后腿的任务,会再启动一个相同的备份任务,然后哪个先执行完就会kill去另外一个,因此在监控网页上经常可以看到正常执行完的作业有被kill掉的任务 推测式执行缺省打开,但如果是代码问题,并不能解决问题,而且会是集群更慢,可以通过在mapred-site.xml配置文件中设置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution可为map任务或reduce任务开启或者关闭推测式执行,*,任务执行优化,重用JVM,可以省去启动新的JVM消耗的时间,因为启动一个JVM是个不小的开销,重用JVM可在mapred-site.xml配置文件中设置mapred.job.reuse.jvm.num单个JVM上运行的最大任务数(1,1或-1表示没有限制) 忽略模式,任务在读取数据失败2次后,会把数据位置告诉jobtracker,后者重新启动该任务并且在遇到所记录的坏数据时直接跳过(缺省关闭,用SkipBadRecord方法打开),*,敬请批评指证!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号