2012-03-19 77 views
1

我想運行一個hadoop單元測試,使用本地文件系統模式...我最好喜歡看到幾個部分m- *文件寫出到磁盤(而不是1)。但是,因爲它只是一個測試,我不想處理64M的數據(默認大小是每塊大約64megs,我相信)。本地hadoop作業的dfs.block.size?

在分佈式模式中,我們可以把這個使用

dfs.block.size 

我想知道閹有沒有辦法,我可以讓我的本地文件系統寫的小部分M檔出,即讓自己的單元測試將用幾個(儘管很小)的文件模仿大規模數據的內容。

回答

3

假設您的輸入格式可以處理可拆分文件(請參閱org.apache.hadoop.mapreduce.lib.input.FileInputFormat.isSplitable(JobContext, Path)方法),您可以修改輸入拆分大小以使用多個映射器處理較小的文件(我假定您正在使用新的API mapreduce包):

例如,如果您使用的擴展FileInputFormatTextInputFormat(或大多數輸入格式),你可以調用靜態UTIL方法:

  • FileInputFormat.setMaxInputSplitSize(Job, long)
  • FileInputFormat.setMinInputSplitSize(Job, long)

long參數是以字節爲單位分割的大小,所以正好被設置爲你想要的尺寸

引擎蓋下,這些方法設置以下作業配置屬性:

  • mapred.min.split.size
  • mapred.max.split.size

最後說明,一些輸入格式可重寫FileInputFormat.getFormatMinSplitSize()方法(對於FileInputFormat,默認爲1個字節),所以如果設置一個值並且hadoop看起來忽略它,那麼請耐心等待。

最後一點 - 您是否考慮MRUnit http://incubator.apache.org/mrunit/對您的MR代碼進行實際「單元」測試?

0

嘗試這樣做,將工作

hadoop fs -D dfs.block.size=16777216 -put 25090206.P .