Chapter03基于Hadoop生态系统的大数据解决方案TP03_第1页
Chapter03基于Hadoop生态系统的大数据解决方案TP03_第2页
Chapter03基于Hadoop生态系统的大数据解决方案TP03_第3页
Chapter03基于Hadoop生态系统的大数据解决方案TP03_第4页
Chapter03基于Hadoop生态系统的大数据解决方案TP03_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章MapReduce实现分布式运算,预习检查,说出MapReduce的作用简述MapReduce的架构设计简述MapReduce的编程模型编写一个MapReduce程序应包括哪三个部分?简述MapReduce作业的执行流程,集中测试,2/39,回顾与作业点评,HDFS的作用是什么?管理HDFS文件有几种方式?编程实现HDFS文件操作有几种方式?分别是什么?区别是什么?点评作业的提交情况和共性问题,回顾,作业点评,3/39,本章任务,统计音乐播放记录文件中的单曲播放次数,4/39,本章目标,理解MapReduce计算模型掌握MapReduce应用开发掌握MapReduce程序在集群上的运行,5/39,生活中的MapReduce,提问,现在需要3个人一起工作,快速对这堆报纸分类,怎么做?,6/39,MapReduce基础5-1,并行计算将大型而复杂的任务分解为许多小型任务同时计算,以提高计算机的处理能力MapReduce是实现了并行计算的编程模型为用户提供接口,屏蔽并行计算的细节map:映射,负责将任务分解成多个子任务reduce:归约,负责把分解后多任务的处理结果进行汇总,7/39,MapReduce基础5-2,四个基本概念JobMapReduce程序编写完成后需要配置成一个MapReduce作业Task作业中的任务,分为两类:MapTask和ReduceTaskJobTracker负责创建MapTask或ReduceTaskTaskTracker负责执行MapTask或ReduceTask,8/39,MapReduce基础5-3,架构设计MapReduceV1Master:JobTracker,初始化作业、创建调度子任务Slave:TaskTracker,执行任务MapReduceV2:YARN,9/39,MapReduce基础5-4,MapReduce执行数据流inputsplitmapshufflereduce,10/39,MapReduce基础5-5,MapReduce作业的工作原理MapReduce编程模型Mapper的实现Reducer的实现Job的配置,11/39,MapReduce应用开发基础4-1,org.apache.hadoop.io.Writable接口Hadoop重新实现序列化机制Hadoop数据类型都实现该接口Hadoop基本数据类型IntWritable:整型数LongWritable:长整型数FloatWritable:浮点数DoubleWritable:双字节数BooleanWritable:布尔型ByteWritable:单字节,对应Java中byte类型BytesWritable:字节数组,对应Java中byte,12/39,MapReduce应用开发基础4-2,Hadoop其它常用数据类型Text:使用UTF8格式存储的文本,对String类型的重写ObjectWritable:是一种对多类型的封装可以用于Java的基本类型,String等如同Java的Object类NullWritable:是一个占位符,序列化长度为零当中的key或value为空时使用ArrayWritable:针对数组的数据类型MapWritable:对java.util.Map的实现,13/39,MapReduce应用开发基础4-3,MapReduce输入格式TextInputFormat:默认的数据输入格式KeyValueTextInputFormat:读取文本键值对SequenceFileInputFormat:读取二进制键值对,hellohadoophellohiworld,读取,hellohadoophellohiworld,读取,LongWritable,Text,Text,Text,14/39,MapReduce应用开发基础4-4,MapReduce输出格式TextOutputFormat:默认的数据输出格式,以键值对的方式把数据写入一个文本文件SequenceFileOutputFormat:输出二进制键值对的顺序文件,1hello2hadoop,写入,LongWritable,Text,15/39,编写MapReduce程序,实现Mapper继承org.apache.hadoop.mapreduce.Mapper实现Reducer继承org.apache.hadoop.mapreduce.Reducer创建并配置Job实例化org.apache.hadoop.mapreduce.Job,实现步骤,16/39,步骤一:实现Mapper,继承Mapper类并重写map()方法,publicclassMapperprotectedvoidmap(KEYINkey,VALUEINvalue,Contextcontext)context.write(KEYOUT)key,(VALUEOUT)value);./省略其它方法定义,依次为:输入键、输入值、输出键、输出值的类型,MapReduce任务所在的上下文,是map任务和reduce任务间的桥梁,Hellohadoop1Hellohadoop2Hellohadoop3,split,输入分片,作为map()的输入,publicvoidmap(Objectkey,Textvalue,Contextcontext)IntWritablevalueOut=newIntWritable(1);StringTokenizertoken=newStringTokenizer(value.toString();while(token.hasMoreTokens()TextkeyOut=newText(token.nextToken();context.write(keyOut,valueOut);,示例,17/39,步骤二:实现Reducer,继承Reducer并重写reduce()方法,publicclassReducerprotectedvoidreduce(KEYINkey,Iterablevalues,Contextcontext)for(VALUEINvalue:values)context.write(KEYOUT)key,(VALUEOUT)value);./省略其它方法定义,map,shuffle,publicvoidreduce(Textkey,Iterablevalues,Contextcontext)intsum=0;for(IntWritableval:values)sum+=val.get();/将每个单词的每次统计求和context.write(key,newIntWritable(sum);,示例,18/39,步骤三:创建MapReduce作业,实例化、配置Job类,Jobjob=newJob(conf,wordcount);/创建作业job.setJarByClass(WordCount.class);/通过class查找job的jar文件job.setMapperClass(TokenizerMapper.class);/指定Mapperjob.setReducerClass(IntSumReducer.class);/指定Reducerjob.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);/设置输入文件路径或目录FileInputFormat.addInputPath(job,newPath(“hdfs:/node1:9000/input/file”);/设置输出文件目录FileOutputFormat.setOutputPath(job,newPath(“hdfs:/node1:9000/output/wordcount”);System.exit(job.waitForCompletion(true)?0:1);/提交作业,同时指定Mapper和Reducer的键/值输出类型;Mapper的键/值输入类型由输入格式决定;Reducer的键/值输入类型由Mapper的输出类型决定,19/39,执行MapReduce程序,运行WordCount打包jar文件运行命令,实现步骤,hadoopjarwordcount.jarcn.mr.WordCountInputpathOutputPath,示例,20/39,学员操作统计单曲播放次数,需求说明要求能够对于所有的音乐播放文件中的每一单曲进行播放次数统计实现思路新建MapReduce项目并配置属性core-site.xml:fs.defaultFSmapred-site.xml:实现map处理实现reduce处理配置作业运行作业,并查看输出结果,指导,21/39,常见问题及解决办法代码规范问题调试技巧,共性问题集中讲解,22/39,MapReduce作业执行流程,作业的提交任务程序代码map()reduce()作业配置Mapper和Reducer的形参类型Mapper和Reducer的输入输出格式输入输出文件路径作业的初始化分配任务执行任务进度的更新作业的完成,作业提交后,由此往下由框架自动执行,23/39,shuffle和排序4-1,Mapper输出是如何转化为Reducer输入的?,shuffle,问题,Mapper输出,Reducer输入,经验,24/39,shuffle和排序4-2,shuffle(混洗)的三个过程分区溢写排序,spill0.outspill1.out.,合并,.out输出文件,按分区合并所有Map任务的输出文件,同时保证在该分区内按键有序,25/39,shuffle和排序4-3,既然shuffle可以保证Reducer的输入在各分区内是按键有序的,那么能不能保证所有分区之间有序呢?又该如何保证全局有序呢?,问题,分析,Reducer1的输入,Reducer2的输入,使分区间有序,Reducer1的输入,Reducer2的输入,26/39,shuffle和排序4-4,使分区间有序自定义Partitioner重写getPartition()方法关键:如何确定分区的边界为作业配置Partitionerjob.setPartitionerClass(Class)实现降序自定义Comparator重写compare()方法应针对不同的key类型实现相应的Comparator两个compare()方法都应重写为作业配置SortComparatorClassjob.setSortComparatorClass(Class),示例,27/39,学员操作统计并排序,需求说明对练习1的统计结果进行排序自定义分区处理:key为song1-song4划分到分区0,其余划分到分区1对统计结果按播放次数降序输出实现思路创建2个作业,首先作业1完成统计,然后作业2完成排序自定义分区类,按单曲名称分别划分到不同分区,并指定mapreduce.job.reduces值为2作业1可使用SequenceFileOutputFormat作为输出格式作业2相应接收作业1的输出,其Mapper处理使用内置的InverseMapper实现key、value对调,并限定reduce个数为1重写IntWritable.Comparator实现降序,指导,28/39,常见问题及解决办法代码规范问题调试技巧,共性问题集中讲解,29/39,MapReduceV1的局限性,JobTracker单点瓶颈TaskTracker端作业分配信息过于简单作业延迟高编程框架不够灵活,30/39,YARN3-1,对MapReduceV1的改进JobTracker:分离集群资源管理和作业管理TaskTracker:演化为节点管理器NodeManager架构设计,资源管理器,节点管理器,应用主体,资源容器,31/39,YARN3-2,配置文件yarn-evn.sh需指定JDK路径mapred-site.xml指定为yarnyarn-site.xml主要配置属性yarn.resourcemanager.addressyarn.resourcemanager.scheduler.addressyarn.resourcemanager.resource-tracker.addressyarn.resourcemanager.admin.addressyarn.resourcemanager.webapp.address需单独启动sbin/start-yarn.sh,32/39,YARN3-3,MapReduce作业执行流程优势提高了集群的扩展性扩展了YARN的适用范围提高了集群资源的利用率,33/39,学员操作查看YARN运行状态,需求说明使用Web页面查看YARN中的作业查看正在运行的作业的状态、进度查看已经完成的作业的摘要信息查看作业历史

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论