2011-12-07 27 views
0

我剛剛通過MapReduce中的單詞計數示例。地圖功能非常簡單。是否有更高級別的函數來決定文件的哪一部分轉到哪個映射器? 假設您依賴於依賴於整個文件輸入的函數(如SHA1),是否有任何要求框架不要拆分文件?在MapReduce中給映射器提供輸入

回答

2

是否有決定的文件的哪一部分去什麼映射更高層次的功能?

當某個節點上的地圖空閒空閒時,調度程序會選擇一個離節點最近的分割點,以儘可能避免數據傳輸。如果未處理的輸入拆分與自由地圖插槽在同一節點上,則處理該拆分,否則將選擇同一機架中的拆分,或者選擇機架外的拆分。

有沒有告訴框架不要拆分文件?

執行FileInputFormat#isSplitable()。然後,輸入文件不會被拆分,並且每個地圖都會被處理一個。

import org.apache.hadoop.fs.*; 
import org.apache.hadoop.mapred.TextInputFormat; 
public class NonSplittableTextInputFormat extends TextInputFormat { 
    @Override 
    protected boolean isSplitable(FileSystem fs, Path file) { 
     return false; 
    } 
} 
1

您可以在Hadoop中編寫自定義InputSplit和RecordReader。您可以編程這些方法來告訴框架以您想要的方式拆分輸入文件。

請查看:http://developer.yahoo.com/hadoop/tutorial/module5.html

+0

檢查我的反應,更好的方式不分裂輸入文件。 –

相關問題