第4周mapr程序设计涉及多语言编程_第1页
第4周mapr程序设计涉及多语言编程_第2页
第4周mapr程序设计涉及多语言编程_第3页
第4周mapr程序设计涉及多语言编程_第4页
第4周mapr程序设计涉及多语言编程_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、MapReduce程序设计(涉及多语言)讲师:董西成OpenPassionValue目录1. MapReduce的编程模型2. MapReduce编程接口介绍3. Java编程4. 多语言编程5. 总结2MapReduce编程模型ØMapReduce将整个运行过程分为两个阶段:Map阶段和Reduce阶段Map阶段由一定数量的Map Task组成Øüüü:InputFormat输入数据格式输入数据处理:Mapper数据分组:PartitionerØReduce阶段由一定数量的Reduce Task组成üüü

2、;数据拷贝数据按照key排序数据处理:Reducer数据输出格式:OutputFormatü3MapReduce编程模型外部物理结构4MapReduce编程模型Ø Map阶段ü InputFormat(默认TextInputFormat)ü Mapperü Combiner(local reducer)ü PartitionerØ Reduce阶段ü Reducerü OutputFormat(默认TextOutputFormat)5目录1. MapReduce的编程模型2. MapReduce编程接口介

3、绍3. Java编程4. 多语言编程5. 总结6MapReduce编程接口Ø Hadoop提供了三种编程方式;ü Java(最原始的方式)ü Hadoop Streaming(支持多语言)ü Hadoop Pipes(支持C/C+)Ø Java编程接口是所有编程方式的基础;Ø 不同的编程接口只是给用户的形式不同而已,内部执行引擎是一样的;Ø 不同编程方式效率不同。Java编程接口Ø Java编程接口组成;ü 旧APIü 新APIØ 新API具有更好的扩展性;Ø 两种编程接口只

4、是给用户的形式不同而已,内部执行引擎是一样的;Ø 旧API可以完全兼容Hadoop 2.0,但新API不行。Hadoop StreamingØ 与Linux管道机制一致Ø 通过标准输入输出实现进程间通信Ø 标准输入输出是任何语言都有的Ø 几个举例:ü cat 1.txt | grep “dong” | sortü cat 1.txt | python grep.py | java sort.jarHadoop Streaming/pipes目录1. MapReduce的编程模型2. MapReduce编程接口介绍3. Jav

5、a编程4. 多语言编程5. 总结11实例1:WordCount问题WordCount问题map阶段WordCount问题reduce阶段WordCount问题mapper设计与实现WordCount问题reducer设计与实现WordCount问题main函数设计与实现WordCount问题程序运行WordCount问题程序运行Wordcount问题输入数据格式l使用默认的TextInputFormatü 每个Map Task处理一个split;ü 一个split大小等于一个block;ü 如果最后一行数据被截断,则部分;后一个block前半ü 转换成k

6、ey/value对,key是偏移量,value是行内容。Wordcount问题输入数据格式Wordcount问题数据流InputFormat输入数据public interface InputFormat<K, V> InputSplit getSplits(JobConf job, int numSplits) throws IOException;RecordReader<K, V> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;l 默认为Text

7、InputFormat,文本文件的;l 用户可通过参数mapred.input.format.class设置InpuFormat实现Mappermap处理逻辑org.apache.hadoop.mapred(旧API):public interface Mapper<K1, V1, K2, V2> extends JobConfigurable, Closeable void map(K1 key, V1 value, OutputCollector<K2, V2> output, Reporter reporter)throws IOException;l 新API位

8、于org.apache.hadoop.mapreduce.Mapper中;l 新API更加灵活。Partitionermap输出结构分片org.apache.hadoop.mapred(旧API):public interface Partitioner<K2, V2> extends JobConfigurable int getPartition(K2 key, V2 value, int numPartitions);org.apache.hadoop.mapreduce(新API):public abstract class Partitioner<KEY, VALU

9、E> public abstract int getPartition(KEY key, VALUE value, int numPartitions);Reducerreduce处理逻辑org.apache.hadoop.mapred(旧API):public interface Reducer<K2, V2, K3, V3> extends JobConfigurable, Closeable void reduce(K2 key, Iterator<V2> values,OutputCollector<K3, V3> output, Report

10、er reporter)throws IOException;l 新API位于org.apache.hadoop.mapreduce.Reducer中;l 新API更加灵活。小结实例2:Grep问题一批TB或者PB量级的文档,需要完成以下功能:lll搜索符合某种规则(正则表达式)的单词或者句子;统计相应的单词或者句子的数目;按照数目对其进行排序,并输出最终结果。Grep问题解决思路排序shopA-Z.+HDFS中的文档频率统计结果排序结果Grep问题解决思路分为两个作业:l作业1:WordCountü 统计符合某种规则的单词数目l作业2:Sortü 按照单词数目进行全排序&

11、#252; 依赖于前一个作业的输出结果Grep问题解决思路Grep问题解决思路Grep问题解决思路Grep问题解决思路Grep程序运行Grep程序运行目录1. MapReduce的编程模型2. MapReduce编程接口介绍3. Java编程4. 多语言编程5. 总结37多语言程序设计思路l以标准输入流作为输入;ü C+:cinü C:scanfl以标准输出流作为输出;ü C+:coutü C:printfl可实现Mapper和Reducer,其他组件(InputFormat、Partitioner等需要用Java语言实现)实例1:用C+实现Wordco

12、unt实例1:用C+实现Wordcount实例1:用C+实现Wordcountllucer实例1:用C+实现WordcountlHadoop上运行Wordcount程序Streaming程序运行方式Streaming程序运行方式说明l “-D”参数:一定要放在所有参数前面,可以有多个;l “-file”或者“-files”参数,设置要分发到各个节点上的文件,对于mapper和reducer文件,必须要用或者“-files” 指定。l 每次运行程序前,清空输出目录bin/hadoop fs -rmr /test/outputStreaming程序运行方式说明bin/hadoop jar cont

13、rib/streaming/hadoop-streaming-0.20.2-cdh3u6.jar -D mapred.reduce.tasks=10 -D =“wordcount-python” -file ./mapper.py -mapper "python mapper.py" -file ./reducer.py -reducer "python reducer.py" -input /test/input -output /test/output实例2:用PHP实现Wordcount实例2:用PHP实现Wordcount实例2:用PHP实现Wordcountl 测试mapper和reducerü cat test.txt| php mapper.php | sort | php reducer.phpl 在Hadoop上运行Java与Streaming编程方式比较lJava编程ü Hado

温馨提示

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

评论

0/150

提交评论