2015-03-08 53 views
0

getSplits()方法返回的是什麼? 根據Apache文檔它返回InputSplit的數組,這是什麼意思?getSplits()方法返回的是什麼?

它是否返回映射器要運行的文件字節塊?

  1. 假設我們有各50MB的3個文件,則它返回[0]時,64MB(36MB第二+第三的28MB),36MB(第三文件)64MB的字節(50MB + 14MB第二文件)並且每個都由3個不同的映射器處理?

  2. 如果我們有一個120MB的大文件,那麼它會返回相同文件的64MB塊?

我甚至不確定我所要求的邏輯與否,我是Hadoop棧新手。

回答

1

方法getSplits()返回拆分 - 關於部分文件的元數據。每個地圖處理一個分割。

如果你的文件很大,它被分成HDFS塊大小的部分(至少64MB)。在第二個例子中,它將是兩個64MB和56MB的分割。雖然現在推薦的塊大小是128MB甚至256MB。

如果文件小於塊大小,它將在單獨的分割中。在你的第一個例子中,你將有三個50MB的分割。如果您想將它們組合並在一個Mapper中進行處理,則可以使用CombineFileInputFormatexample)。

+0

謝謝@Andrey Sozykin – 2015-03-09 08:53:29

0

MapReduce中的輸入拆分是映射器階段的並行化單元。如果你有10個輸入分割,那麼你將有10個映射器。在通常情況下,文件塊將映射到輸入分割。

一個InputSplit對象包含有關分割的信息,但不包括分割數據本身。根據子類(如FileSplit),此信息可能是諸如分割的位置以及它的大小等項目。