2013-07-25 40 views

回答

7

這取決於你:

  • 輸入格式 - 某些輸入格式(NLineInputFormatWholeFileInputFormat),比上塊大小其它邊界進行工作。一般而言,從FileInputFormat擴展的任何內容都將使用塊邊界作爲指南
  • 文件塊大小 - 單個文件不需要具有與默認塊大小相同的塊大小。這是在文件上傳到HDFS時設置的 - 如果未明確設置,則應用默認塊大小(在上傳時)。文件後對默認/系統塊大小的任何更改都不會對已上傳的文件產生影響。
  • 兩個FileInputFormat配置屬性mapred.min.split.sizemapred.max.split.size通常默認爲1Long.MAX_VALUE,但如果這是在您的系統配置覆蓋,或在你的工作,那麼這將改變每個映射處理的數據amunt和數量映射器任務產生。
  • 非分裂式壓縮 - 如gzip,不能​​由不止一個映射器處理,因此(,除非你使用像CombineFileInputFormatCompositeInputFormat),你會得到每gzip文件1名映射

所以,如果你有64米塊大小的文件,但無論是要處理比這個在每張地圖的任務多跌少,那麼你應該只能夠設置以下作業配置屬性:

  • mapred.min.split.size - 大於默認情況下,如果你想使用更少的映射器,代價是(可能)損失數據loc先進而精湛(由單個map任務處理的所有數據現在可能在2個或多個數據節點)
  • mapred.max.split.size - 比默認小,如果你想使用更映射器(說你有一個CPU密集型映射器)來處理每個文件

如果您使用MR2 /紗線那麼上面的屬性由棄用,取而代之:

  • mapreduce.input.fileinputformat.split.minsize
  • mapreduce.input.fileinputformat.split.maxsize
相關問題