日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
向你老婆解釋清楚MapReduce

干巴巴的定義

成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元北鎮(zhèn)做網(wǎng)站,已為上家服務(wù),為北鎮(zhèn)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。

當(dāng)前的軟件實(shí)現(xiàn)是指定一個(gè)Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對中的每一個(gè)共享相同的鍵組。

形象的解釋1:統(tǒng)計(jì)圖書

我們要數(shù)圖書館中的所有書。你數(shù)1號書架,我數(shù)2號書架,這就是“Map”。我們?nèi)嗽蕉?,?shù)的就更快。

現(xiàn)在我們到一起,把所有人的統(tǒng)計(jì)數(shù)加在一起,這就是“Reduce”。

形象的解釋2:統(tǒng)計(jì)圖形

我們來看一個(gè)關(guān)于圖形統(tǒng)計(jì)的MapReduce流程,兩個(gè)人負(fù)責(zé)把左側(cè)的一堆圖形,按照形狀和顏色歸類統(tǒng)計(jì)各自的數(shù)量。

實(shí)戰(zhàn):計(jì)算平均成績的Java Hadoop MapReduce程序

說了那么多,你老婆可能已經(jīng)理解了MR,但是你可能還無法和程序代碼聯(lián)系起來,下面的這個(gè)小例子可以幫助到你,類似的樣例網(wǎng)上很多,去搜索吧,這里簡單分析一下關(guān)鍵代碼,通過標(biāo)注的name和Text key,你需要理解什么是MapReduce中的key以及key的作用。

數(shù)據(jù)環(huán)境:位于Hadoop中的chinese.txt、english.txt、math.txt文件分別記錄了所有學(xué)生的語文、英語、數(shù)學(xué)成績,文件內(nèi)容格式為,姓名 分?jǐn)?shù),中間以空格分隔。

 
 
 
 
  1. public class Score { 
  2.     public static class ScoreMap extends 
  3.             Mapper { 
  4.         // 實(shí)現(xiàn)map函數(shù) 
  5.         public void map(LongWritable key, Text value, Context context) 
  6.                 throws IOException, InterruptedException { 
  7.             // 將輸入的純文本文件的數(shù)據(jù)轉(zhuǎn)化成String 
  8.             String line = value.toString(); 
  9.             // 將輸入的數(shù)據(jù)首先按行進(jìn)行分割 
  10.             StringTokenizer tokenizerArticle = new StringTokenizer(line, "\n"); 
  11.             // 分別對每一行進(jìn)行處理 
  12.             while (tokenizerArticle.hasMoreElements()) { 
  13.                 // 每行按空格劃分 
  14.                 StringTokenizer tokenizerLine = new StringTokenizer(tokenizerArticle.nextToken()); 
  15.                 String strName = tokenizerLine.nextToken();// 學(xué)生姓名部分 
  16.                 String strScore = tokenizerLine.nextToken();// 成績部分 
  17.                 Text name = new Text(strName); 
  18.                 int scoreInt = Integer.parseInt(strScore); 
  19.                 // 輸出姓名和成績,以name做為key對分?jǐn)?shù)歸類 
  20.                 context.write(name, new IntWritable(scoreInt)); 
  21.             } 
  22.         } 
  23.     } 
  24.  
  25.     public static class ScoreReduce extends 
  26.             Reducer { 
  27.         // 實(shí)現(xiàn)reduce函數(shù) 
  28.         public void reduce(Text key, Iterable values, 
  29.                 Context context) throws IOException, InterruptedException { 
  30.             int sum = 0; 
  31.             int count = 0; 
  32.             Iterator iterator = values.iterator(); 
  33.             while (iterator.hasNext()) { 
  34.                 sum += iterator.next().get();// 計(jì)算總分 
  35.                 count++;// 統(tǒng)計(jì)總的科目數(shù) 
  36.             } 
  37.             int average = (int) sum / count;// 計(jì)算平均成績 
  38.             context.write(key, new IntWritable(average)); 
  39.         } 
  40.     } 
  41.     public static void main(String[] args) throws Exception { 
  42.         ... 
  43.         // 設(shè)置Map和Reduce處理類 
  44.         job.setMapperClass(ScoreMap.class); 
  45.         job.setReducerClass(ScoreReduce.class); 
  46.        ... 
  47.     } 

***的話

如果你要進(jìn)一步了解MR,***的方法就是從頭成功運(yùn)行一個(gè)hello world程序,通過一次成功的實(shí)踐,你會發(fā)現(xiàn)MR這東西實(shí)在太簡單了,否則說明你還沒有成功運(yùn)行過***個(gè)小程序。實(shí)踐!實(shí)踐!實(shí)踐!

【本文為專欄作者“朱國立”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號“開發(fā)者圓桌”獲取聯(lián)系和授權(quán)】


當(dāng)前標(biāo)題:向你老婆解釋清楚MapReduce
網(wǎng)站鏈接:http://m.5511xx.com/article/coipoop.html