2017-06-19 31 views
1

https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/Mapper.html#method.summary是否有人在你的實現中重寫Mapper run(Context)方法?

運行(上下文)的方法org.apache.hadoop.mapreduce.Mapper

a). Expert users can override this method for more complete control over the execution of the Mapper. 
  1. 什麼是目前運行(上下文)方法的默認行爲。

  2. 如果我重寫運行(上下文)什麼樣的特殊控制將得到按照文件?

  3. 是否有人在您的實現中重寫了此方法?

回答

2
  1. 什麼是目前運行(上下文)方法的默認行爲。

默認的實現是在爲Mapper類Apache的Hadoop的源代碼可見:

/** 
* Expert users can override this method for more complete control over the 
* execution of the Mapper. 
* @param context 
* @throws IOException 
*/ 
public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    try { 
    while (context.nextKeyValue()) { 
     map(context.getCurrentKey(), context.getCurrentValue(), context); 
    } 
    } finally { 
    cleanup(context); 
    } 
} 

總結:對於一次性初始化

  1. 呼叫setup
  2. 迭代輸入中的所有鍵 - 值對。
  3. 將密鑰和值傳遞給map方法實現。
  4. 致電cleanup一次性拆解。
  • 如果我重寫運行(上下文)會得到什麼樣的特殊控制的按文件?
  • 默認實現總是遵循單個線程中的特定執行順序。重寫此代碼很少見,但它可能爲高度專業化的實現(如不同的線程模型或嘗試合併多餘的密鑰範圍)提供了可能性。

    1. 是否有人在您的實現中重寫了此方法?

    在Apache的Hadoop的代碼庫,存在的這種兩所覆蓋:

    • ChainMapper允許單個地圖任務內執行鏈接多個Mapper類實現在一起。覆蓋run設置代表鏈的對象,並通過該映射器鏈傳遞每個輸入鍵/值對。
    • MultithreadedMapper允許多線程執行另一個Mapper類。 Mapper類必須是線程安全的。 run的覆蓋將啓動多個線程迭代輸入鍵值對並將它們傳遞給底層的Mapper
    相關問題