本篇內(nèi)容主要講解“MapReduce中的Partitioner怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MapReduce中的Partitioner怎么使用”吧!
為新疆等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及新疆網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計、新疆網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
問題導(dǎo)讀:
1.Partitioner分區(qū)類的作用是什么?
2.getPartition()三個參數(shù)分別是什么?
3.numReduceTasks指的是設(shè)置的Reducer任務(wù)數(shù)量,默認值是是多少?
擴展:
如果不同類型的數(shù)據(jù)被分配到了同一個分區(qū),輸出的數(shù)據(jù)是否還是有序的?
在進行MapReduce計算時,有時候需要把最終的輸出數(shù)據(jù)分到不同的文件中,比如按照省份劃分的話,需要把同一省份的數(shù)據(jù)放到一個文件中;按照性別劃分的話,需要把同一性別的數(shù)據(jù)放到一個文件中。我們知道最終的輸出數(shù)據(jù)是來自于Reducer任務(wù)。那么,如果要得到多個文件,意味著有同樣數(shù)量的Reducer任務(wù)在運行。Reducer任務(wù)的數(shù)據(jù)來自于Mapper任務(wù),也就說Mapper任務(wù)要劃分數(shù)據(jù),對于不同的數(shù)據(jù)分配給不同的Reducer任務(wù)運行。Mapper任務(wù)劃分數(shù)據(jù)的過程就稱作Partition。負責實現(xiàn)劃分數(shù)據(jù)的類稱作Partitioner。
在我們前面講過的例子中,始終沒有提到分區(qū),那是因為框架內(nèi)置了分區(qū)類,稱作HashPartitioner。我們看一下源碼,如圖6-6
圖6-6
在圖6-6中,HashPartitioner是處理Mapper任務(wù)輸出的,getPartition()方法有三個形參,key、value分別指的是Mapper任務(wù)的輸出,numReduceTasks指的是設(shè)置的Reducer任務(wù)數(shù)量,默認值是1。那么任何整數(shù)與1相除的余數(shù)肯定是0。也就是說getPartition(…)方法的返回值總是0。也就是Mapper任務(wù)的輸出總是送給一個Reducer任務(wù),最終只能輸出到一個文件中。
據(jù)此分析,如果想要最終輸出到多個文件中,在Mapper任務(wù)中對數(shù)據(jù)應(yīng)該劃分到多個區(qū)中。那么,我們只需要按照一定的規(guī)則讓getPartition(…)方法的返回值是0,1,2,3…即可。
假設(shè)我們按照性別分區(qū),那么可以覆蓋Partitioner類的getpartition(…)方法,代碼如圖6-7
圖6-7
在圖6-7中,我們分別使用0、1、2與numPartitions相除。如果想把數(shù)據(jù)分到三個不同的輸出中,意味著numPartitions的值是3。這樣,0%3、1%3、2%3的值才是三個不同的。那么,我們怎么使用哪?只需要在驅(qū)動中進行兩個操作即可,如圖6-8
圖6-8
在圖6-8中,我們使用了自定義的分區(qū)類,并且制定了numReduceTasks。這里的numReduceTasks在內(nèi)部就把值賦給了分區(qū)類中形式參數(shù)numPartitions。
到此,相信大家對“MapReduce中的Partitioner怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!