并行计算模型MapReduce资料下载.pdf
- 文档编号:5982898
- 上传时间:2023-05-05
- 格式:PDF
- 页数:69
- 大小:1.55MB
并行计算模型MapReduce资料下载.pdf
《并行计算模型MapReduce资料下载.pdf》由会员分享,可在线阅读,更多相关《并行计算模型MapReduce资料下载.pdf(69页珍藏版)》请在冰点文库上搜索。
排序通常用于衡量分排序通常用于衡量分布式数据处理框架的布式数据处理框架的数据处理能力数据处理能力例例1:
一个单词统计的实例:
一个单词统计的实例实验结果实验结果Output:
NumberofoccurrencesofeachwordInput:
FilecontainingwordsHelloWorldByeWorldHelloHadoopByeHadoopByeHadoopHelloHadoopBye3Hadoop4Hello3World2MapReduce对原始的数据进行分割(Split),得到N个不同的数据分块每一个数据分块都启动一个Map进行处理。
每个Map中按照首字母将字符串分配到26个不同的桶中按照首字母将Map中不同桶中的字符串集合放置到相应的Reduce中进行处理。
SplitsSplits分片分片Hadoop将MapReduce的输入数据划分成等长的小数据块split.Split意味着处理每个分片所需的时间,将少于处理整个输入数据所化时间.Hadoop为每个分片建立一个map任务,并由该任务来执行用户定义的map函数,从而处理分片中的每条记录.Anyway,这意味着管理分片的总时间,和构建map任务的时间,将决定job的整个执行时间.实现实现MapMap类类这个类实现Mapper接口中的map方法,输入参数中的value是文本文件中的一行,利用StringTokenizer将这个字符串拆成单词,然后将输出结果写入到org.apache.hadoop.mapred.OutputCollector中。
WordCountWordCount-MapMapInput1,“HelloWorldByeWorld”2,“HelloHadoopByeHadoop”3,“ByeHadoopHelloHadoop”Output.CollecterMap(K,V)ForeachwordwinVCollect(w,1);
MapMapMap实现实现ReduceReduce类类这个类实现Reducer接口中的reduce方法,输入参数中的key,values是由Map任务输出的中间结果,values是一个Iterator,遍历这个Iterator,就可以得到属于同一个key的所有value.此处,key是一个单词,value是词频。
只需要将所有的value相加,就可以得到这个单词的总的出现次数。
WordCountWordCount-ReduceReduceReduce(K,V)Intcount=0;
ForeachvinVcount+=v;
Collect(K,count);
InternalGroupingReduceOutputReduceReduceReduceReduceReduceInput运行运行JobJob在Hadoop中一次计算任务称之为一个job,可以通过一个JobConf对象设置如何运行这个job。
然后将JobConf对象作为参数,调用JobClient的runJob,开始执行这个计算任务。
实例分析:
WordCountWordCount例例22:
气象数据分析实例:
气象数据分析实例25美国气象局提供的气象数据数据按行并以ASCII格式存储,每行是一条记录.存储格式中包含众多的数据元素其中很多元素可以选择性的输入其数据存储的长度是可变的问题分析问题分析对气象数据中的年份和温度进行分析找出最高气温平均气温待处理的气象数据如下:
Example.Example.气象数据的格式气象数据的格式0057332130#USAFweatherstationidentifier99999#WBANweatherstationidentifier19500101#observationdate0300#observationtime+51317#latitude(degreesx1000)+028783#longitude(degreesx1000)00450#skyceilingheight(meters)1#qualitycode010000#visibilitydistance(meters)1#qualitycode.-0128#airtemperature(degreesCelsiusx10)1#qualitycode-0139#dewpointtemperature(degreesCelsiusx10)1#qualitycode10268#atmosphericpressure(hectopascalsx10)1#qualitycode方法:
使用方法:
使用MapReduceMapReduce分析分析根据MapReduce的设计思路,采用Map和Reduce两阶段:
以键值对(key-valuepair,KVP)作为输入/输出,其类型由程序员选择.为此要定义两个函数:
map和reduce函数.MapReduceMapReduce数据流数据流最底下是一个Unixpipeline模拟MapReduce流程JavaJavaMapReduceMapReduce代码中的三个组成:
map函数,reduce函数,运行job的代码.SeeExample最高气温的MapperMapperMapper参数参数Mapperinputkey是longintegeroffsetinputvalue是lineoftext,outputkey是yearoutputvalue是temperature(integer).在org.apache.hadoop.io中有LongWritable(JavaLong),Text(JavaString),IntWritable(JavaInteger).ReducerReducer参数参数Reducerreduce前2个输入参数(Text和IntWritable)应该与map的输出类型一致MapReduceMapReducejobjob代码代码JobConfconf=newJobConf(MaxTemperature.class);
conf.setJobName(Maxtemperature);
FileInputFormat.addInputPath(conf,newPath(args0);
FileOutputFormat.setOutputPath(conf,newPath(args1);
conf.setMapperClass(MaxTemperatureMapper.class);
conf.setReducerClass(MaxTemperatureReducer.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
JobClient.runJob(conf);
MapReduceMapReducejobjobMapReduceJob是客户端需要执行的一个工作单元,组成是:
输入数据,MapReduce程序,配置信息.Hadoop将作业job拆分为若干个小任务task,其中包括两类:
maptasks和reducetasks.数据本地化数据本地化数据本地化是MapReduce的灵魂,也是其高效的原因MapReduce尽量将数据靠近计算节点,数据本地化导致数据获取可以快速高效网络带宽是数据中心最稀缺的资源MapReduce采用合理的网络拓扑设置来预留网络带宽.这些布局不会影响MapReduce快速的CPU分析能力.MapMap阶段数据本地优化阶段数据本地优化Hadoop在存储有输入数据(HDFS中)的节点上运行map任务可以获得最佳性能.分片大小应该与HDFS块block的大小一致,64MB如果分片跨越两块,同一分片中的两部分数据将频繁的通过网络传输到map任务节点,导致低效率Maptask将其输出写入到本地硬盘,notHDFS.Map的输出只是中间结果,最终结果是reduce处理后才产生.一旦作业完成,map的输出结果可以被删除如果某节点上的map任务在中间结果传送给reduce之前失败,Hadoop将自动在另外的节点上重新执行这个map,并再次构建中间结果ReduceReduce无本地化数据优势无本地化数据优势Reducetasks不采用本地化数据reducetask的数据输入是从所有的mappers中获得Reduce的输出通常是存储在HDFS,以实现可靠存储.对于每个reduce输出的HDFS块block,第一个复本replica,写在本地节点上,其它复本存储在其它机架节点上.因此reduce的输出写入HDFS确实要占用带宽,但这与正常的HDFS流水线写入的时间消耗一样.无无reducereduce的的MapReduceMapReduce数据流数据流单单reducereduceMapReduceMapReduce数据流数据流多多reducereduceMapReduceMapReduce数据流数据流Reduce的tasks数量并非由输入数据的大小决定.如果有多个reducers,每个maptasks都会对其输出进行分区partition为每个reducetask建立一个分区.但每个键对应的键值对记录都在同一个分区分区由用户定义的分区函数控制通常有默认的分区函数partitioner通过hash函数来区分CombinerCombiner函数函数集群上的可用带宽限制了MapReduce的作业数量;
应该尽量减少Map和Reducetasks间的数据传输量Combiner被指定为map的输出Combiner输出作为reduce的输入.例子例子第一个map输出的:
(1950,0)(1950,20)(1950,10)第二个map输出的:
(1950,25)(1950,15)没有combiner,map输出给reducer(1950,0,20,10,25,15)有combiner,combiner输出给reducer(1950,20,25)max(0,20,10,25,15)=max(max(0,20,10),max(25,15)=max(20,25)=25不是普适的不是普适的例如计算平均气温mean,如果采用Combiner可能会导致问题,因为:
mean(0,20,10,25,15)=14而:
mean(mean(0,20,10),mean(25,15)=mean(10,20)=15SeeExampleforcombineHadoopHadoopStreamingStreaming流流Hadoop提供了MapReduce的API,允许使用非Java语言来写map和reduce函数.HadoopStreaming采用Unix标准流作为Hadoop和其它程序间的接口可以用任何编程语言,通过标准的输入输出来写MapReduce程序.JavaAPIJavaAPIvsvsStreamingStreamingJavaAPI控制的map一次只能处理一条记录,针对输入数据中的每条记录,该框架调用map()方法来处理.多行只能是通过mapper中的多行汇聚,然后实现close方法,再处理.Streamingmap程序可以轻松读取多行.因为它受读操作的控制.HadoopHadoopPipesPipesPipes是MapReduceC+interface的代称.Pipes采用sockets作为tasktracker与C+版本map或reduce函数间的通道而Streaming使用的是JNI(JavaNativeInterface).C+interface中的keys和values按字节byte缓冲buffers,用STL中的strings表示.这简化了interfacePipes不在standalone(local)模式下运行MapReduceMapReduce程序编写程序编写调试配置流程调试配置流程编写map和reduce函数小数据集测试Cluster测试查错Debug微调Tuning配置ConfigureMapReduceMapReduceWebUIWebUI界面界面HadoopwebUI用于浏览jobs作业信息.对于跟踪作业运行进度、查找作业完成后的统计信息和日志,非常有用.可以用这个来驱动webUIhttp:
/jobtracker-host:
50030/Job,Task,Job,Task,和和TaskAttemptIDsTaskAttemptIDsjobID格式包含两部分jobtracker(不是job)开始时间由jobtracker维护的增量计数器它唯一标识此作业.例子jobID:
job_201204110811_0002jobtrackerjobtracker页面页面第一部分是Hadoop安装细节版本号、编译时间jobtracker当前状态(running),启动时间集群概要正在运行、(成功)完成,和失败的jobs.链接信息,有的指向jobtrackerslogsJobtracker历史信息JobtrackerJobtracker页面页面JobJob页面页面点击jobID进入job页面作业job的摘要,包括一些基本信息:
jobowner和name,和job运行时间.当job运行时,可以监视作业进度,页面会自动更新.可以在页面上,找到任务进度完成图.jobjob页面页面获取结果获取结果一旦作业完成,每个reducer产生一个输出文件如果输出文件很大,将文件分为多个part很重要在max-temp目录中有part-000XX等多个文件.用-getmerge选项,可以得到源模式目录中的所有文件,并在本地文件系统上合并为一个单独的文件:
%hadoopfs-getmergemax-tempmax-temp-local如果输出文件很小,可以用-cat打印输出%hadoopfs-catmax-temp/*TasksTasks页面页面任务页面包含一些查看作业中任务细节的连接.点击“map”进入页面,显示全部maptasks的信息.也可以只看完成的tasks.后页是一个Task页面样例.taskstasks页面页面tasktask详细页面详细页面任务详细页面有更多的细节信息.“Actions”列包含终止taskattempt的链接.默认状态下是禁止的,webUI是只读.将webinterface.private.actions设置为true可以启动此链接.tasktask页面细节页面细节HadoopHadoop用户日志用户日志loglog针对不同用户,Hadoop在诸多地方生成了logs日志.Hadooplog表中有总结(在下一页).MapReduce任务日志tasklogs可以通过webUI界面访问任何将标准输出,或标准错误流的写操作,都直接写到相关的日志文件.Streaming方式下,标准输出被用于map或reduce的输出所以并不会出现在标准输出日志文件中.HadoopHadooploglog表表61作业调优作业调优Job运行后,“能够更快吗?
”有一些Hadoop相关的“疑点”值得检查,看看是不是引发性能问题的关键.在开始任务级别的分析或优化以前,task表中的内容(completedtasks),应该仔细检查。
Mappers数量mappers需要运行多长时间?
如果平均只运行几秒钟,则可以看看是否可以用更少的mapper运行更长的时间,通常是1分钟左右,时间长短取决于使用的输入格式.Reducers数量为达到最高性能,集群cluster中的reducers应该少于reduce任务槽数slots.这使得reducers能够在一个周期完成任务,并在reduce阶段充分使用集群.Combiners作业能否充分利用combiner来减少shuffle传输的数据量?
中间值的压缩对map输出的压缩,总数使得作业的执行更快.自定义序列化如果整在使用自己定义的Writable对象或comparators,则必须保证已经实现RawComparator.调整Shuffleshuffle可以通过一些内存管理的参数进行调整,以弥补性能的不足ProfilingTasksProfilingTasks分析任务分析任务许多配置属性可以控制分析过程这些属性也可以通过JobConf获得.对MaxTemperatureDriver的修改将启动远程的HPROF分析.HPROF是JDK自带的分析工具,能够提供程序的CPU和堆使用情况:
conf.setProfileEnabled(true);
conf.setProfileParams(-agentlib:
hprof=cpu=samples,heap=sites,depth=6,+force=n,thread=y,verbose=n,file=%s);
conf.setProfileTaskRange(true,0-2);
HPROFHPROF例子例子下面是一个mapper分析文件,显示了CPU的抽样信息:
MapReduceMapReduce工作流工作流前例中,如果处理过程复杂,一定是因为有更多的MapReducejobs而不是更复杂的Map和reduce函数.只是增加更多的作业,而非增加作业复杂度.对更复杂的问题,可以考虑采用比MapReduce更高级的语言如Pig,Hive,orCascading.工作流原则工作流原则把问题分解成MapReduce作业Jobs设计更多(简单的)MapReduce阶段将导致更多可分解、可维护的mappers和reducers.运行独立的作业Jobs当MapReduce工作流中的作业不止一个时,一个一个线性的运行作业是最有效的.对于比较复杂的结构,Hadoop有相关的类库可以协助安排工作流OozieHadoop提供的一个工作流系统,详细使用可查看http:
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 计算 模型 MapReduce
![提示](https://static.bingdoc.com/images/bang_tan.gif)