当前位置: 首页 > 科技观察

向您的妻子解释一下MapReduce

时间:2023-03-18 18:07:37 科技观察

的枯燥定义MapReduce是一种用于对大型数据集(大于1TB)进行并行计算的编程模型。他们的主要思想“Map(映射)”和“Reduce(缩减)”这两个概念既是从函数式编程语言中借用的,也是从向量编程语言中借用的特性。它极大地方便了程序员无需分布式并行编程就可以在分布式系统上运行他们的程序。目前的软件实现是指定一个Map(映射)函数将一组键值对映射成一组新的键值对,并指定一个并发的Reduce(归约)函数来保证所有映射的键值对每个共享同一组密钥。可视化解释1:计数书籍我们需要对图书馆中的所有书籍进行计数。你数一号书架,我数二号书架。这是“地图”。我们拥有的越多,我们就能数得越快。现在我们聚在一起,把每个人的统计数据加起来,这就是“Reduce”。可视化解释2:统计图形我们来看一个MapReduce的图形统计过程。两个人负责对左边的一堆图形进行排序,并根据形状和颜色统计各自的数量。实战:计算平均成绩的JavaHadoopMapReduce程序说了这么多。你老婆可能听懂了MR,但你可能连程序码都接不上。下面的小例子可以帮助你。网上有很多类似的例子,自己去搜索一下,这里简单分析一下关键代码,通过标注的名字和Textkey,大家需要了解什么是MapReduce中的key以及key的作用。数据环境:位于Hadoop中的Chinese.txt、english.txt、math.txt文件分别记录了所有学生的语文、英语、数学成绩。文件内容格式为姓名+分数,中间用空格隔开。publicclassScore{publicstaticclassScoreMaextendsMapper{//实现map函数publicvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{//将输入的纯文本文件的数据转换成StringStringline=value.toString();//先按行拆分输入数据StringTokenizertokenizerArticle=newStringTokenizer(line,"\n");//分别处理每一行while(tokenizerArticle.hasMoreElements()){//按空格拆分每一行StringTokenizertokenizerLine=newStringTokenizer(tokenizerArticle.nextToken());StringstrName=tokenizerLine.nextToken();//学生姓名部分StringstrScore=tokenizerLine.nextToken();//成绩部分Textname=newText(strName);intscoreInt=Integer.parseInt(strScore);//输出姓名和score,以name为key对score进行分类>values,Contextcontext)throwsIOException,InterruptedException{intsum=0;intcount=0;Iteratoriterator=values.iterator();while(iterator.hasNext()){sum+=iterator.next().get();//计算总分count++;//统计科目总数}intaverage=(int)sum/count;//计算平均分context.write(key,newIntWritable(average));}}publicstaticvoidmain(String[]args)throwsException{...//设置Map和Reduce处理类job.setMapperClass(ScoreMap.class);job.setReducerClass(ScoreReduce.class);...}}***如果你想深入了解MR,最好的方法是从头开始成功运行一个helloworld程序。练习成功后,你会发现MR太简单了,否则说明你第一次小程序练习还没有跑成功!实践!实践!【本文为专栏作者“朱国立”原创稿件,转载请通过作者微信公众号“开发者圆桌”获取联系及授权】点此阅读作者更多好文

最新推荐
猜你喜欢