天天看點

Hadoop分塊和分片

一、分塊:

       HDFS存儲系統中,引入了檔案系統的分塊概念(block),塊是存儲的最小機關,HDFS定義其大小為64MB。存儲在 HDFS上的檔案均存儲為多個塊,如果某檔案大小沒有到達64MB,該檔案不會占據整個塊空間。在分布式的HDFS叢集上,Hadoop系統保證一個塊存儲在一個datanode上。

       HDFS的namenode隻存儲整個檔案系統的中繼資料鏡像,這個鏡像由配置dfs.name.dir指定,datanode則存有檔案的metainfo和具體的分塊,存儲路徑由dfs.data.dir指定。

二、分片:

       hadoop的作業在送出過程中,需要把具體的輸入進行分片。具體的分片細節由InputSplitFormat指定。分片的規則為  FileInputFormat.class中的getSplits()方法指定:

       long splitSize = computeSplitSize(goalSize, minSize, blockSize);

      computeSplitSize:

             Math.max(minSize, Math.min(goalSize, blockSize));

       其中goalSize為“InputFile大小”/“我們在配置檔案中定義的mapred.map.tasks”值,minsize為mapred.min.split.size,blockSize為64,是以,這個算式為取分片大小不大于block,并且不小于在mapred.min.split.size配置中定義的最小Size。預設情況下,以HDFS的一個塊的大小(預設為64M)為一個分片

        當某個分塊分成均等的若幹分片時,會有最後一個分片大小小于定義的分片大小,則該分片獨立成為一個分片。