HDFS的小文件問題

 

  • HDFS 中任何一個文件,目錄或者數據塊在 NameNode 節點內存中均以一個對象形式表示(元數據),而這受到 NameNode 物理內存容量的限制。每一個元數據對象約佔 150 byte,因此若是有1千萬個小文件,每一個文件佔用一個block,則 NameNode 大約須要2G空間。若是存儲1億個文件,則 NameNode 須要20G空間,這毫無疑問1億個小文件是不可取的。
  • 處理小文件並不是 Hadoop 的設計目標,HDFS 的設計目標是流式訪問大數據集(TB級別)。於是,在 HDFS 中存儲大量小文件是很低效的。訪問大量小文件常常會致使大量的 seek,以及不斷的在 DatanNde 間跳躍去檢索小文件。這不是一個頗有效的訪問模式,嚴重影響性能。
  • 處理大量小文件速度遠遠小於處理同等大小的大文件的速度。每個小文件要佔用一個slot,而任務啓動將耗費大量時間甚至大部分時間都耗費在啓動任務和釋聽任務上。
  • MapReduce上的小文件問題:Map任務通常一次只處理一個塊的輸入(input。若是文件很是小,而且有不少,那麼每個 Map 任務都僅僅處理很是小的輸入數據,並會產生大量的 Map 任務,每個 Map 任務都會額外增長bookkeeping 開銷。+map任務是jvm進程級別的,也會有啓動銷燬的開銷
相關文章
相關標籤/搜索