大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

1。可以看到上面就是分割槽的案例,需求。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

2。可以看到我們要實現上面的需求,我們把136開頭的放到分割槽0,檔案1,137開頭的放到分割槽1,檔案1,

138開頭的放到分割槽2,檔案2,139開頭的放到分割槽3,檔案3中,其他開頭的手機號,放到分割槽4,檔案4中去。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

3。我們用之前手機號統計流量的那個例子來修改實現。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

4。我們新建一個partitioner2的包

然後,把writable包中的之前寫的統計手機流量的例子,copy過來

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

5。copy過來以後,然後我們去建立一個partitioner這個類,我們自己定義的分割槽類。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

6。可以看到這個partitioner有兩個,選擇長的這個要注意。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

7。可以看到這個Partitioner需要個key,value對吧,那麼這個kv是什麼kv呢,可以看到資料是從,map到分割槽,然後再走到reduce中的

是透過key,value格式的資料傳遞的。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

8。那好,我們現在去我們之前的mapper中去,找對應的key,value就可以了,可以看到上面

LongWritable,Text,這個是讀取的我們檔案中的內容的key,value對吧,key指的是行號,是LongWritable格式的,然後內容是Text格式的

然後,後面是處理完以後要輸出的資料,Text是手機號,然後FlowBean的對應的流量統計情況的bean。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

9。獲取手機號的前3位。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

10。可以看到上面,我們判斷手機號是136開頭的放到0號分割槽,以此類推。

否則放到4號分割槽。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

11。然後設定完了以後,我們設定輸出路徑是一個新的路徑,然後注意,把我們剛剛寫的那個partitioner類,設定好,

可以看到job。setPartitionerClass(ProvincePartitioner。class) 設定了,我們剛剛寫好的那個類,然後

job。setNumReduceTasks(5),這裡要設定5,因為我們只有0到4,號分割槽對吧。

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

12。然後我們去執行一下在Driver類中,執行

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

大資料之-Hadoop3.x_MapReduce_自定義分割槽案例

13。執行以後看結果可以看到,跟預想的一樣是5個分割槽檔案對吧。可以開啟看看。

14。可以去看看0號分割槽,這個時候是136開頭的對吧,沒問題。

15。1號分割槽是137對吧,其他的也是對應的。