私塾学习网hadoop中高级mapreduce高级编程_第1页
私塾学习网hadoop中高级mapreduce高级编程_第2页
私塾学习网hadoop中高级mapreduce高级编程_第3页
私塾学习网hadoop中高级mapreduce高级编程_第4页
私塾学习网hadoop中高级mapreduce高级编程_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、深入浅出学Hadoop-中高级部分系列精品私塾本节课程概览重要的组件Join排序计数器合并小文件示例网第一部分:重要的组件网Combiner PartitionerRecordReader网CombinerCombinercombine函数把一个map函数产生的对(多个key, value)合并成一个新的. 将新的作为输入到reduce函数中,其格式与 reduce函数相同。这样可以有效的较少中间结果,减少网络传输负荷。什么情况下可以使用Combiner可以对进行汇总统计的场景,如求和。求平均数的场景就不可以使用了网Combiner执行时机运行combiner函数的时机有可能会是merge完成

2、之前,或者之后,这个时机可以由一个参数控制,即mindefault 3)bine(biner,并且spill数最少有3个的时候,那么当中设定了combiner函数就会在merge产生结果文件之前运行通过这样的方式,就可以在spill非常多需要merge,并且很多数据需要做conbine的时候,减少写入到磁盘文件的数据数量,同样是为了减少对磁盘的读写频率,有可能达到优化作业的目的。Combiner也有可能不执行, Combiner会考虑当时集群的负载情况。网Combiner如何使用代码示例继承Reducer类public sic class Combiner extends MapReduceB

3、ase implementsReducer public void reduce(Text key, Iterator values,Outpollector output, Reporter reporter)throws IOException binerClass(Combiner.class)配置作业时加入网PartitionerPartitionerMapreduce 通过Partitioner 对Key 进行分区,进而把数据按发。自己的需求来分什么情况下使用Partitioner如果你需要key按照自己意愿分发,那么你需要这样的组件。例如:数据文件内包含省份,而输出要求每个省份输出

4、一个文件。框架默认的HashPartitionerpublic class HashPartitioner extends Partitioner /* Use link ObjecshCode() to partition. */publicgetPartition(K key, V value,numReduceTasks) return (key.hashCode() &eger.MAX_VALUE) % numReduceTasks;网Partitioner如何使用实现Partitioner接口覆盖getPartition()方法配置作业时加入conf.setPartitionerCl

5、ass(MyPartitioner.class); Partitioner示例public sic class MyPartitioner implements Partitioner OverridepublicgetPartition(Text key, Text value,numPartitions) 网Partitioner需求示例需求描述数据文件中含有省份需要相同的省份送到相同的Reduce里从而产生不同的文件数据样例1 liaoning1 代表该省份有多少个直辖市步骤实现Partitioner,覆盖getPartition根据省份字段进行切分网RecordReaderRecord

6、Reader对,也就是说每一次用于在分块中类。一条都会调用该主要是处理经过InputFormat分片完的数据什么时候使用RecordReader需要对输入的数据按自己的需求处理如:要求输入的key不是文件的偏移量而是文件的路径或者名字网RecordReader系统默认为LineRecordReader按照每行的偏移量做为map输出时的key值,每行的内容作为map的value值,默认的分隔符是回车和换行。网RecordReader需求示例需求更改map对应的输入的值,key对应的文件的路径(或者是文件名),value对应的是文件的内容(content)。步骤重写InputFormat不对文件切

7、分重写RecordReader在配置作业时使用自定义的组件进行数据处理网第二部分:Join网案例分析Map端Join实现Reduce端Join实现网案例分析输入为2个文件,文件一内容如下空格分割:用户名内容样例号Tom 1314567890 14文件二内容空格分割:内容样例号 地市hubei需要统计出的汇总信息为 用户名号地市网Map端Join设计思路使用DistributedCache.addCacheFile()将地市的文件加入到所有Map的缓存里在Map函数里该文件,进行Join将结果输出到reduce需要注意的是DistributedCache需要在生成Job作业前使用网Reduce端

8、Join设计思路Map端所有文件,并在输出的内容里加上标识代表数据时从哪个文件里来的在reduce对按照标识对数据进行保存然后根据Key的Join来求出结果直接输出网第三部分:排序网普通排序部分排序全局排序二次排序网普通排序Mapreduce本身自带排序功能Text对象是不适合排序的,如果内容为整型不会编码顺序去排序可以考虑以 Writable做为Key,同时将Reduce设置成一般情况下0 ,进行排序网部分排序即输出的每个文件都是排过序的如果不需要全局排序,那么这是个不错的选择。网全局排序产生背景Hadoop没有提供全局数据排序,而在大规模数据处理中进行数据的全局排序是非常普遍的需求。使用h

9、adoop进行大量的数据排序排序最直观的方法是把文件所有内容给map之后,map不做任何处理,直接输出给一个reduce,利用hadoop的自己的shuffle机制,对所有数据进行排序,而后由 reduce直接输出。快速排序基本步骤就是需要现在所有数据中选取一个作为支点。然后将大于这个支点的放在一边,小于这个支点的放在另一边。网全局排序有N个支点(这里可以称为标尺),就可以把所有的数据设想如果分成N+1个part,将这N+1个part丢给reduce,由hadoop自动排序,最后输出N+1个一个文件,收工。有序的文件,再把这N+1个文件首尾相连合并成可以归纳出这样一个用hadoop对大量数据排

10、序的步骤:对待排序数据进行抽样;对抽样数据进行排序,产生标尺;Map对输入的每条数据计算其处于哪两个标尺之间;将数据发给对由此1)2)3)应区间ID的reduce4) Reduce将获得数据直接输出。网全局排序Hadoop 提供了S采样器。ler接口可以返回一组样本,该接口为Hadoop的publicerfaK getSler le(InputFormat inf, Job job)throws IOException,erruptedException;Hadoop提供了一个TotalOrd序。artitioner,可以使来实现全局排网二次排序产生背景MapReduce默认会对key进行排序

11、将输出到Reduce的values也进行预先的排序实现方式重写Partitioner,完成key分区,进行第一次排序parator,完成自己的排序逻辑,完成key的第2实现次排序网二次排序原理Map之前的数据key1 key2 key2 key3key112342Mapduce只能排序key,所以为了二次排序 value ,组合完后要重新定义自己的key 简单说来就是key1key2key2key32 3 42 12342网二次排序原理接下来实现自定义的排序类,分组类,数据变成key1key1key2key22 2 3 412234最后 reduce处理后输出结果key1 key1 key2

12、key2key312234网第四部分:计数器网内置计数器自定义Java计数器网计数器计数器计数器主要用来收集系统信息和作业运行信息,用于知道作业成功、失败等情况,比日志更便利进行分析。内置计数器Hadoop内置的计数器,作业执行情况和情况。包括MapReduce框架、文件系统、作业计数三大类。计数器由关联任务给jobtracker。计数器可以被全局,定期传递给tasktracker,再由tasktracker传。内置的作业计数器实际上由jobtracker,不必在整个网络中传递。当一个作业执行成功后,计数器的值才是完整可靠的。网用户自定义Java计数器MapReduce框架允许用户自定义计数器

13、计数器是全局使用的计数器有组的概念,可以由一个Java枚举类型来定义如何配置0.20.2以下的版本使用Reporter,0.20.2以上的版本使用context.getCounter(groupName, counterName) 来获取计数器配置并设置。网用户自定义Java计数器动态计数器所谓动态计数器即不采用Java枚举的方式来定义Reporter中的获取动态计数器的方法public void incrCounter(String group,String组名称,计数器名称,计数值counter,longamount)一些原则创建计数器时,尽量让名称易读网用户自定义Java计数器获取计数器Web UI命令行 hadoop job-counter Java APIJava API在作业运行完成后,计数器稳定后获取。 使用job.getCounters()得到Counters网第五部分:合并小文件示例网合并小文件产生背景Hadoop不适合处理小文件会占

温馨提示

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

评论

0/150

提交评论