百度HDFS集羣的數據壓縮實現大數據的儲存

當前,數字信息急劇膨脹。根據IDC的研究結果,2011年創造的信息數量達到1800EB,每一年產生的數字信息量還在以60%的速度高速增加,到 2020年,全球每一年產生的數字信息將達到35ZB。面對海量數據處理的需求,「大數據」這一新的概念應運而生。關於大數據的定義,目前尚未標準的說 法。node

Hadoop Distributed File System,簡稱HDFS,是一個分佈式文件系統。HDFS有着高容錯性(fault-tolerent)的特色,而且設計用來部署在低廉的(low- cost)硬件上。並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣能夠實現流的形式訪問(streaming access)文件系統中的數據。HDFS開始是爲開源的apache項目nutch的基礎結構而建立,HDFS是hadoop項目的一部分,而 hadoop又是lucene的一部分。算法

HDFS設計的針對對象主要適合流式訪問的超大文件、在使用便宜的硬件搭建的集羣上運行。HDFS中Block的大小默認是64M,小於塊大小的的文件並不佔據整個塊的所有空間(一個塊可能存有多個文件)。apache

在談到爲何使用百度HDFS集羣的數據壓縮時,孫桂林表示,在存儲上帶來了靈活的可擴展性、高可用性、充分提升了存儲空間利用率。異步

使用Blocks的好處分佈式

1) 能夠存儲大文件,一個文件的大小能夠大於任何一個單塊硬盤的容量oop

2) 把存儲單元抽象成塊而不是文件,簡化了存儲子系統:簡化了數據管理、取消元數據關注大數據

3) 能很好適應數據複製,數據複製保證系統的容錯和可用性。ui

HDFS提供了兩種namenode的容錯機制編碼

1) 備份存儲持久化狀態的文件系統元數據的文件spa

2) 提供secondary namenode。Secondary的主要角色是合併namespace image和edit log,防止edit log過大。可是secondary namenode的數據較master namenode的數據有所延遲,全部數據恢復之後確定會有數據丟失。

通常來說,冷數據和老數據常常會被壓縮,塊壓縮相對於文件壓縮的優點在於三方面。第一,透明性,客戶端不須要知道壓縮的存在,也不須要知道升級。第二,靈活性,對實際壓縮的算法沒有限制。第三,本地性,不須要在跨數據節點的壓縮操做。

百度HDFS集羣的數據壓縮

提到異步壓縮時,孫桂林表示,一個集羣能從未壓縮的狀態變成壓縮狀態最多花費十天,若是壓縮的數據很繁瑣,咱們能夠經過處理器來減輕CPU的負載。

\

存儲壓縮的機制

DataNode數據已經壓縮了,Client可能不知道,DataNode 在響應Client的時候回將數據解壓。

Client 和DataNode之間能夠經過壓縮的機制。整個通訊協議須要一些擴展,須要告訴寫方,咱們所須要壓縮的文件格式以及什麼樣的編碼。在寫的操做上,存儲編碼和傳輸編碼不同,咱們能夠選擇是否壓縮儲存和傳輸編碼。在讀的操做上,支持一些協議來進行轉換。

\

爲了節省帶寬,咱們儘可能避免DataNode 和DataNode之間重複壓縮的問題。在Append以前咱們須要解壓最後的塊,仍是解壓最後一兆數據。一旦文件被Append以後,表示這個文件的最 後一個塊不被壓縮。在壓縮的時候,首先咱們須要選擇壓縮速率,相對而言解壓的速度更爲關鍵。咱們的目標是要實現節省存儲空間、避免壓縮影響計算做業,實時 壓縮透明。

如何處理小文件

一、 把小文件變成大文件(歸檔操做)

二、 把相同目錄下的小文件合成一個大文件。數據塊的大小能夠達到一個數量級,能夠作壓縮處理。

不一樣的集羣,壓縮比部太同樣,壓縮比介於10%到50%之間,大部分的集羣咱們均可以獲取50%以上的空間收益。

將來,咱們主推的是後臺異步壓縮,等待CPU空閒的時候,咱們纔會開始壓縮。壓縮過程和壓縮編碼徹底透明,咱們能夠採用分級壓縮方法。對於冷數據,咱們可使用一些極致的壓縮算法,儘可能來節省空間。經過一些歸檔操做,咱們能夠節省大量的磁盤空間。

不少時候,咱們A模塊的輸出數據恰好是B模塊的輸入,咱們能夠提供一個塊共享的Quota Calculating ,咱們能夠經過塊共享的機制使用快速拷貝。

一個文件若是存在的時候,對於一些重複的塊文件該怎麼處理,這將是咱們將來的發展方向。

相關文章
相關標籤/搜索