我正在使用 hdfs-sink-connector 將 Kafka 的資料消耗到 HDFS 中。
Kafka 連接器每 10 分鐘寫入一次資料,有時寫入的檔案非常小;它從 2MB 到 100MB 不等。因此,寫入的檔案實際上浪費了我的 HDFS 存盤,因為每個塊大小為 256MB。
該目錄是按日期創建的;所以我想知道每天批量將許多小檔案合并到一個大檔案中會很棒。(我預計 HDFS 會自動將一個大檔案分成塊大小。)
我知道有很多答案說我們可以使用 spark's coalesce(1)or repartition(1),但是如果我閱讀整個目錄并使用這些功能,我會擔心 OOM 錯誤;如果我閱讀每個檔案,它可能會超過 90GB~100GB。
HDFS 中是否允許 90~100GB?我不需要擔心嗎?誰能告訴我是否有合并小型 HDFS 檔案的最佳實踐?謝謝!
uj5u.com熱心網友回復:
因此,寫入的檔案實際上浪費了我的 HDFS 存盤,因為每個塊大小為 256MB。
HDFS 不會“填充”塊中未使用的部分。所以一個 2MB 的檔案只使用 2MB 的磁盤空間(好吧,如果你考慮到 3x 復制,則為 6MB)。HDFS 上小檔案的主要問題是數十億的小檔案可能會導致問題。
如果我閱讀整個目錄并使用這些功能,我擔心會出現 OOM 錯誤
Spark 可能是一個記憶體處理框架,但如果資料不適合記憶體,它仍然可以作業。在這種情況下,處理會溢位到磁盤上并且會慢一些。
HDFS 中是否允許 90~100GB?
這絕對沒問題——畢竟這是大資料。正如您所指出的,實際檔案將在后臺拆分為較小的塊(但除非您使用,否則您不會看到這一點hadoop fsck)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/447319.html
