溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MapReduce中的Partitioner怎么使用

發(fā)布時間:2021-12-09 16:16:44 來源:億速云 閱讀:130 作者:iii 欄目:云計算

本篇內容主要講解“MapReduce中的Partitioner怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MapReduce中的Partitioner怎么使用”吧!

問題導讀:
1.Partitioner分區(qū)類的作用是什么?
2.getPartition()三個參數分別是什么?
3.numReduceTasks指的是設置的Reducer任務數量,默認值是是多少?
擴展:
如果不同類型的數據被分配到了同一個分區(qū),輸出的數據是否還是有序的?
MapReduce中的Partitioner怎么使用




在進行MapReduce計算時,有時候需要把最終的輸出數據分到不同的文件中,比如按照省份劃分的話,需要把同一省份的數據放到一個文件中;按照性別劃分的話,需要把同一性別的數據放到一個文件中。我們知道最終的輸出數據是來自于Reducer任務。那么,如果要得到多個文件,意味著有同樣數量的Reducer任務在運行。Reducer任務的數據來自于Mapper任務,也就說Mapper任務要劃分數據,對于不同的數據分配給不同的Reducer任務運行。Mapper任務劃分數據的過程就稱作Partition。負責實現劃分數據的類稱作Partitioner。

在我們前面講過的例子中,始終沒有提到分區(qū),那是因為框架內置了分區(qū)類,稱作HashPartitioner。我們看一下源碼,如圖6-6

MapReduce中的Partitioner怎么使用 

圖6-6

在圖6-6中,HashPartitioner是處理Mapper任務輸出的,getPartition()方法有三個形參,key、value分別指的是Mapper任務的輸出,numReduceTasks指的是設置的Reducer任務數量,默認值是1。那么任何整數與1相除的余數肯定是0。也就是說getPartition(…)方法的返回值總是0。也就是Mapper任務的輸出總是送給一個Reducer任務,最終只能輸出到一個文件中。

據此分析,如果想要最終輸出到多個文件中,在Mapper任務中對數據應該劃分到多個區(qū)中。那么,我們只需要按照一定的規(guī)則讓getPartition(…)方法的返回值是0,1,2,3…即可。

假設我們按照性別分區(qū),那么可以覆蓋Partitioner類的getpartition(…)方法,代碼如圖6-7

MapReduce中的Partitioner怎么使用 

圖6-7

在圖6-7中,我們分別使用0、1、2與numPartitions相除。如果想把數據分到三個不同的輸出中,意味著numPartitions的值是3。這樣,0%3、1%3、2%3的值才是三個不同的。那么,我們怎么使用哪?只需要在驅動中進行兩個操作即可,如圖6-8

MapReduce中的Partitioner怎么使用 

圖6-8

在圖6-8中,我們使用了自定義的分區(qū)類,并且制定了numReduceTasks。這里的numReduceTasks在內部就把值賦給了分區(qū)類中形式參數numPartitions。

到此,相信大家對“MapReduce中的Partitioner怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI