歡迎來到魔據教育大數據學院,專注大數據工程師培養!
當前位置:首頁 > 學習資料 > 講師博文 > hadoop開發必讀:認識Context類的作用

hadoop開發必讀:認識Context類的作用

時間:2017-08-17 17:46:18作者:[!--zuozhe--]

 

問題提出
1. Context能干什么?
2. 你對Context類了解多少?
3. Context在mapreduce中的作用是什么?
下面我們通過來源碼,來得到Context的作用:
下面主要對Setup函數進行深入探討:首先看下兩個程序的區別:

7-1.png

7-2.png

區別在于第一個程序把context這個上下文對象作為map函數的參數傳到map函數中,第二個程序則是在setup函數中處理了context對象,從這個角度講,在Map類的實例中是可以拿到Context這個上下文對象的,這一點是毋庸置疑的,不管是在類內部的哪個函數中使用都可以,既然是這樣,那么討論的重點就是map這個類中方法的聲明及執行了,所以分析下Mapper類的源代碼:

7-3.png

在mapper類中,只對這個方法進行了聲明,也就是說它的子類可以重新實現這個方法,這一點很容易理解的。
下面從源碼級分析下整個mapper類的結構和hadoop在設計這個類時的巧妙之處:
Map的主要任務就是把輸入的key value轉換為指定的中間結果(其實也是key value),這個類主要包括了四個函數:

7-4.png

Setup一般是在執行map函數前做一些準備工作,map是主要的數據處理函數,cleanup則是在map執行完成后做一些清理工作和finally字句的作用很像,下面看一下run方法:

7-5.png

 

這個方法調用了上面的三個函數,組成了setup-map-cleanup這樣的執行序列,這一點和設計模式中的模版模式很類似,當然在這里我們也可以改寫它的源碼,比如可以在map的時候增加多線程,這樣可以對map任務做進一步的優化,從以上的分析可以很清楚的知道setup函數的作用了。
下面為run方法
1.   /**
2.    * Expert users can override this method for more complete control over the
3.    * execution of the Mapper.
4.    * @param context
5.    * @throws IOException
6.    */
7.   public void run(Context context) throws IOException, InterruptedException {
8.     setup(context);
9.     try {
10.       while (context.nextKeyValue()) {
11.         map(context.getCurrentKey(), context.getCurrentValue(), context);
12.       }
13.     } finally {
14.       cleanup(context);
15.     }
16.   }
從上面run方法可以看出,K/V對是從傳入的Context獲取的。我們也可以從下面的map方法看出,輸出結果K/V對也是通過Context來完成的。 
那么我們上文中提到的Context對象是怎么回事呢?

7-6.png

        原來它是mapper的一個內部類,簡單的說頂級接口是為了在map或是reduce任務中跟蹤task的狀態,很自然的MapContext就是記錄了map執行的上下文,在mapper類中,這個context可以存儲一些job conf的信息,比如習題一中的運行時參數等,我們可以在map函數中處理這個信息,這也是hadoop中參數傳遞中一個很經典的例子,同時context作為了map和reduce執行中各個函數的一個橋梁,這個設計和java web中的session對象、application對象很相似。

更多大數據相關資訊敬請關注魔據教育,為您分享最及時的大數據資訊。
學習大數據敬請關注魔據教育微信二維碼。
魔據教育微信二維碼

【版權與免責聲明】如發現內容存在版權問題,煩請提供相關信息發郵件至[email protected],我們將及時溝通與處理。本站內容除非來源注明魔據教育,否則均為網友轉載,涉及言論、版權與本站無關。

全國咨詢熱線:18501996998,值班手機:18501996998(7*24小時)

在線咨詢:張老師QQ 320169340

企業合作服務專線:010-82340234-821, 院校合作洽談專線:010-82340234

Copyright 2001-2019 魔據教育 - 北京華育興業科技有限公司 版權所有,京ICP備17018991號-2

免費在線咨詢立即咨詢

免費索取技術資料立即索取

大數據技術交流QQ:226594285

電話咨詢010-82340234

【看图找生肖】免费