小檔案問題

2021-07-03 05:47:38 字數 795 閱讀 9108

5.2    小檔案問題

小檔案是指檔案size小於hdfs上block大小的檔案。這樣的檔案會給hadoop的擴充套件性和效能帶來嚴重問題。首先,在hdfs中,任何block,檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔150byte,如果有1000 0000個小檔案,每個檔案占用乙個block,則namenode需要2g空間(存兩份)。如果儲存1億個檔案,則namenode需要20g空間。這樣namenode記憶體容量嚴重制約了集群的擴充套件。 其次,訪問大量小檔案速度遠遠小於訪問幾個大檔案。hdfs最初是為流式訪問大檔案開發的,如果訪問大量小檔案,需要不斷的從乙個datanode跳到另乙個datanode,嚴重影響效能。最後,處理大量小檔案速度遠遠小於處理同等大小的大檔案的速度。每乙個小檔案要占用乙個slot,而task啟動將耗費大量時間甚至大部分時間都耗費在啟動task和釋放task上。

對於hadoop小檔案問題,當前主要有兩種解決方案,(1)設計一種工具(比如mapreduce作業)交給使用者,讓使用者自己每隔一段時間將小檔案打包成大檔案,當前hadoop本身提供了幾個這樣的工具,包括hadoop archive(hadoop提供了shell命令),sequence file(需自己寫程式實現)和combinefileinputformat(需自己寫程式實現)。(2)從系統層面解決hdfs小檔案,**[10][11]介紹了它們思路,大體上說思路基本一致:在原有hdfs基礎上新增乙個小檔案處理模組,當使用者上傳乙個檔案時,判斷該檔案是否屬於小檔案,如果是,則交給小檔案處理模組處理,否則,交給通用檔案處理模組處理。小檔案處理模組的設計思想是,先將很多小檔案合併成乙個大檔案,然後為這些小檔案建立索引,以便進行快速訪問和訪問。

Spark Sql 小檔案問題

參考 使用spark sql apis 處理資料容易產生生成大量小檔案,小檔案問題也是在分布式計算中常見的問題。一般有三種方法來處理這類問題 spark.sql.shuffle.partitions 引數通過在處理joins 或 aggregations 等shuffle操作來控制輸出的分割槽數。可...

Hive insert into小檔案問題

測試資料 create table test small dist id intcomment 區組id account string comment 賬號 gold intcomment 金幣 row format delimited fields terminated by 插入兩條資料 ins...

HDFS小檔案問題

1 概述 小檔案是指檔案size小於hdfs上block大小的檔案。這樣的檔案會給hadoop的擴充套件性和效能帶來嚴重問題。首先,在hdfs中,任何block,檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔150byte,如果有1000 0000個小檔案,每個檔案占用乙個block,則na...