2016-07-04 98 views
0

HDFS的一個大問題是壓縮:如果壓縮文件,則必須處理可分割壓縮。爲什麼HDFS要求您壓縮整個文件,而不是在HDFS塊級別實現壓縮?塊級別的HDFS壓縮

這樣可以解決這個問題:一個64 MB的塊被讀取或寫入一個塊中,它足夠大,可以壓縮,而且不會干擾操作或需要可拆分壓縮。

這是否有任何實現?

回答

1

我在這裏猜測,但我可以看到幾個問題。

HDFS包含一個名爲local short-circuit reads的功能。這允許datanode打開塊文件,驗證安全性,然後將文件描述符傳遞到在同一節點上運行的應用程序。這完全繞過了任何通過HTTP或其他方式從HDFS傳輸到M/R應用程序(或任何HDFS應用程序正在讀取文件)的文件傳輸。在高性能簇上短路讀取是常態,而不是一個例外,因爲處理髮生在分裂所在的位置。您所描述的內容需要讀者理解塊壓縮才能讀取塊。

其他考慮因素涉及跨區塊的拆分。壓縮格式通常缺乏隨機訪問並需要順序訪問。由於壓縮,從塊中讀取最後幾個字節以構成跨越下一個塊的分割,可能與讀取整個塊一樣昂貴。

我不是說塊壓縮是不可能的,但我覺得更復雜的是你期望的。

此外,塊壓縮可以是transparently delegated to filesystem

最後但並非最不重要的是,在HDFS上方的數據層存在更好的壓縮格式:ORC,Parquet