1. 程式人生 > >Mapreduce中context的作用

Mapreduce中context的作用

在我們寫mapreduce的程式時候總會有這麼一段程式碼,這個程式碼就是map方法的實現,裡面有一個引數 context物件,但是這個context物件究竟是幹什麼的呢?

  public void map(Object key, Text value, Context context

                    ) throws IOException, InterruptedException {

      StringTokenizer itr = new StringTokenizer(value.toString());

      while (itr.hasMoreTokens()) {

        word.set
(itr.nextToken()); context.write(word, one); } }

CONTEXT和其他類和其他介面的關係:

Context 類是Mapper 類的內部抽象類,它實現了MapContext 介面MapContext 裡面可以得到split的資訊,這個介面實現了 TaskInputOutputContext 這個介面

taskInputOutputContext 這個接口裡面一些記錄 getCurrentKey、getCurrentValue、nextKeyValue, getOutputCommitter(這個是一個OutputCommitter的抽象類,這個提供了提交的一些操作方法和屬性)的方法,這個介面實現了TaskAttemptContext這個介面

​TaskAttemptContext 這個介面儲存了 task的一些資訊,這個介面實現了JobContext和Progressable這個介面

​JobContext和Progressable這個2個介面,這2個介面儲存了job的資訊和程式執行過程的進展

​Mapper類:

 protected voidsetup(Context context

                       ) throws IOException,InterruptedException {

   // NOTHING

 }

 @SuppressWarnings("unchecked"
) protected voidmap(KEYIN key, VALUEIN value, Context context) throws IOException,InterruptedException { context.write((KEYOUT) key, (VALUEOUT) value); } protected voidcleanup(Context context ) throws IOException,InterruptedException { // NOTHING }

​從上面的原始碼可以看出來, setup方法來處理context物件,可以為物件增加一些新的成員,或者修改之前成員,從map方法來看,context物件是做為一個引數傳給map函式,在Mapper類的例項中是可以拿到Context這個上下文物件的.

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

public voidrun(Context context) throws IOException, InterruptedException {

   setup(context);

   try{

     while(context.nextKeyValue()) {

        map(context.getCurrentKey(),context.getCurrentValue(), context);

     }

   } finally{

     cleanup(context);

   }

  }

​這個方法呼叫了上面的三個函式,組成了setup-map-cleanup這樣的執行序列,這一點和設計模式中的模版模式很類似,當然在這裡我們也可以改寫它的原始碼,比如可以在map的時候增加多執行緒,這樣可以對map任務做進一步的優化,從以上的分析可以很清楚的知道setup函式的作用了,從上面run方法可以看出,K/V對是從傳入的Context獲取的。我們也可以從下面的map方法看出,輸出結果K/V對也是通過Context來完成的。

​總結:context它是mapper的一個內部類,簡單的說頂級介面是為了在map或是reduce任務中跟蹤task的狀態,很自然的MapContext就是記錄了map執行的上下文,在mapper類中,這個context可以儲存一些job conf的資訊,比如job執行時引數等,我們可以在map函式中處理這個資訊,這也是hadoop中引數傳遞中一個很經典的例子,同時context作為了map和reduce執行中各個函式的一個橋樑,這個設計和java web中的session物件、application物件很相似

相關推薦

Mapreducecontext作用

在我們寫mapreduce的程式時候總會有這麼一段程式碼,這個程式碼就是map方法的實現,裡面有一個引數 context物件,但是這個context物件究竟是幹什麼的呢? public void map(Object key, Text value,

關於mapreducecontext.write同一物件不同值是否會覆蓋問題的瞭解

在寫mapreduce程式碼時,有時context.write()同一物件(物件的值會改變),會造成覆蓋的問題嗎?我們瞭解ArrayList在記憶體中,物件也在記憶體中,ArrayList儲存的是對物件地址的引用,不停更改值後add到ArrayList中,那麼所有的值都被覆蓋

MapReducecombine、partition、shuffle的作用是什麽

rgs 輸出 microsoft ted pop .com int ack 結果 http://www.aboutyun.com/thread-8927-1-1.html Mapreduce在hadoop中是一個比較難以的概念。以下須要用心

理解javaScript作用域和上下文Understanding Scope and Context in JavaScript

譯者注:一直對於作用域和上下文感到很混亂,無意中看到這篇文章,覺得講得很好,故翻譯來與大家分享。翻譯不好之處,請大家多多指教。 原文連結:http://ryanmorr.com/understanding-scope-and-context-in-javascript/   前言部分,不做翻譯

web.xmlcontext-param作用

web.xml的配置中<context-param>配置作用 1. 啟動一個WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個節點: < listener></listener> 和 <context-

web.xmlcontext-param,listener等作用及載入過程

<context-param>的作用: web.xml的配置中<context-param>配置作用(可在listener和servlet中使用,而 ContextLoaderListener及contextConfigLocation則由spri

mapreducereduce的叠代器只能調用一次!

new resultset row reducer style prot category nds 重復 親測,只能調用一次,如果想想在一次reduce重復使用叠代器中的數據,得先取出來放在list中然後在從list中取出來!!多次讀取reduce函數中叠代器的數據

springcontext:property-placeholder/元素

有一種 jdbc連接 控制 正是 依賴 內容 str jdbc cli 1.有些參數在某些階段中是常量 比如:a、在開發階段我們連接數據庫時的連接url,username,password,driverClass等

Serializable在C#作用及其優點

p s mst access pen eat mat zab ref hal 原文發布時間為:2009-10-27 —— 來源於本人的百度文章 [由搬家工具導入]Serializalbe - Enable the object can be Serialized into

static在C/C++作用-(轉自華山大師兄)

運行時 str 如果 字符數 class 但我 靜態成員 var 使用 1.先來介紹它的第一條也是最重要的一條:隱藏。(static函數,static變量均可) 當同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。舉例來說明。同時編譯兩個源文件

C語言作用域,鏈接屬性和存儲類型

硬件 變量的存儲 bsp 文件的 tro 們的 沒有 聲明 一個 作用域 當變量在程序的某個部分被聲明的時候,他只有在程序的一定漁區才能被訪問,編譯器可以確認4種不同類型的作用域:文件作用域,函數作用域,代碼塊作用域和原型作用域 1.代碼塊作用域:位於一對花括號之間的所

aNDROIDCONTEXT的基礎

and list andro aid ext hao123 text roi android中 aNDROID%E7%8E%AF%E5%A2%83%E6%90%AD%E9%85%8D%E5%87%BA%E7%8E%B0%E5%BC%82%E5%B8%B8 http://m

context 作用域小解

return window 作用域 getc s上下文 兼容 sel bsp all context 是js 的作用域和this上下文對象的合集,對於它的理解是前端開發的重中之重 知識點 1 對象的作用域,什麽時候是User對象,是時候是window全局對象?  變量的有

公證在不動產登記作用及責任

規則 p s 可見 tar 建立 href 數量 審查 自身 據公證雲報道:不動產是老百姓最為重要的物質財富,涉不動產相關權益的保護至關重要。長期以來,我國公證行業配合不動產登記機關工作,承擔不動產登記前的前置審查責任,在不動產流轉安全、不動產權利保護方面發揮了重要作用。《

ScrollView在布局作用

images ima ges .cn 這樣的 分享 src http .com   ScrollView就是滾動一個View,將View裏面的內容滾動起來。 但是由於scroolview只能有一個孩子,因此我們可以在ScrollView中在定義一個布局。 這樣的話,我們就會

《算法導論》學習筆記第一章(算法在計算作用

out sep round 第一章 about win knowledge mode owin   第一章主要講了一些概念,什麽是算法,為什麽算法值得研究。   印象比較深的是章節的最後一句,是否具有算法知識與技術的堅實基礎是區分真正熟練的程序員與初學者的一個特征。使用現代

js!!的作用

ole 操作符 設置 結果 由於 兩個 class true als var o={flag:true}; var test=!!o.flag;//等效於var test=o.flag||false; alert(test);由於對null與undefined用!操作

`這個符號在mysql作用

幫助 sse 數據 ren 符號 over ntpd 昨天 ria 昨天開始寫代碼,把數據插入到mysql數據庫中,但是怎麽也沒辦法插入,上網搜,最後的辦法是在phpmyadmin中插入數據後將它轉換為php語句,最後如下: //$sql = "INSERT INTO

Python作用

enc class als 變量的作用域 全局 當前 glob 模塊 作用 Python中的作用域 Python 中,一個變量的作用域總是由在代碼中被賦值的地方所決定的。 當 Python 遇到一個變量的話他會按照這樣的順序進行搜索: 本地作用域(Local)→當前作用域被