1.什麼是blockapp
塊是以 block size 進行劃分數據。 所以,若是羣集中的 block size 爲 128 MB,則數據集的每一個塊將爲 128 MB,除非最後一個塊小於block size(文件大小不能被 block size 徹底整除)。例以下圖中文件大小爲513MB,513%128=1,最後一個塊(e)小於block size,大小爲1MB。 所以,塊是以 block size 的硬切割,而且塊甚至能夠在邏輯記錄結束以前結束(blocks can end even before a logical record ends)。ide
假設咱們的集羣中block size 是128 MB,每一個邏輯記錄大約100 MB(假設爲巨大的記錄)。因此第一個記錄將徹底在一個塊中,由於記錄大小爲100 MB小於塊大小128 MB。可是,第二個記錄不能徹底在一個塊中,所以第二條記錄將出如今兩個塊中,從塊1開始,在塊2中結束oop
2.什麼是inputSplitorm
若是分配一個Mapper給塊1,在這種狀況下,Mapper不能處理第二條記錄,由於塊1中沒有完整第二條記錄。由於HDFS不知道文件塊中的內容,它不知道記錄會何時可能溢出到另外一個塊(because HDFS has no conception of what’s inside the file blocks, it can’t gauge when a record might spill over into another block)。InputSplit這是解決這種跨越塊邊界的那些記錄問題,Hadoop使用邏輯表示存儲在文件塊中的數據,稱爲輸入拆分(InputSplit)。blog
當MapReduce做業客戶端計算InputSplit時,它會計算出塊中第一個完整記錄的開始位置和最後一個記錄的結束位置。在最後一個記錄不完整的狀況下,InputSplit 包括下一個塊的位置信息和完成該記錄所需的數據的字節偏移(In cases where the last record in a block is incomplete, the input split includes location information for the next block and the byte offset of the data needed to complete the record)。下圖顯示了數據塊和InputSplit之間的關係:input
塊是磁盤中的數據存儲的物理塊,其中InputSplit不是物理數據塊。 它是一個Java類,指向塊中的開始和結束位置。 所以,當Mapper嘗試讀取數據時,它清楚地知道從何處開始讀取以及在哪裏中止讀取。 InputSplit的開始位置能夠在塊中開始,在另外一個塊中結束。InputSplit表明了邏輯記錄邊界,在MapReduce執行期間,Hadoop掃描塊並建立InputSplits,而且每一個InputSplit將被分配給一個Mapper進行處理。it