Google 為了應對快速增長的數據處理,開發了一套算法。后來有人根據算法的思想,開發出開源的軟件框架 ,就是Hadoop, 隨著越來越多的組織和個人開發者在框架開發中不斷貢獻改進,Hadoop 已經形成一套家族產品,成為當下最成功最流行的分布式大數據處理框架。
Hadoop 受到很多組織青睞,是因為有兩大因素:
一、超大規模的數據處理, 通常 10TB 以上;
二、超復雜的計算工作,例如統計和模擬。
Hadoop 在很多應用場景中發揮著主要功用,如大規模統計、ETL數據挖掘、大數據智能分析、機器學習等。
Hadoop 和 傳統SQL關系數據存儲 有什么區別?
Hadoop 讀時模式(Schema on read),傳統SQL是 寫時模式(Schema on write).傳統數據庫存儲時對數據進行檢查,需要檢查表結構定義等必須匹配后才讓存儲(write),否則就報錯。Hadoop 是你拿過任何數據格式我都給你存儲,只要你給我讀取這些數據的接口程序,在用到這些數據時(read),才會檢查。
左邊是Schema on Read ,右邊是Schema on Write。 右邊數據格式不對會報錯,左邊更關注讀數據的規則。Hadoop 是分布式數據庫, 而大部分SQL是集中存儲的。
舉例來講: 微信后臺有可能數千個服務器節點用于存儲微信聊天記錄,假設我的聊天記錄分布在60個不同的服務節點上。而對于關系數據庫,會集中在多個表空間中。
假如我搜索我的一個聊天記錄,Hadoop 會把搜索任務分成多個均衡負載的搜索任務運行在60個節點上。而傳統SQL會逐個搜索存儲空間,直到全部遍歷。如果沒有完全搜索完,會返回搜索結果嗎? Hadoop的回答是YES,而傳統SQL會是NO。
Hadoop 家族的產品 Hive,可以讓不怎么懂SQL 的客戶開發出基本上和SQL同樣功能的查詢
Hadoop 的數據寫入、備份、刪除操作
一、數據寫入
在客戶端想HDFS寫數據的過程中,主要分為下面幾個過程:
客戶端將數據緩存到本地的一個臨時文件中;
當這個本地的臨時文件到達HDFS中的塊大小限制時,客戶端訪問Namenode,Namenode將文件的名字插入到HDFS命名空間中,并且為其分配相應的存儲位置;
Namenode與分配好的Datanode進行溝通,確定存儲位置可用,然后將這些存儲位置信息返回給客戶端;
客戶端將本地的臨時文件傳輸到Datanode中;
當寫文件結束,臨時文件關閉時,會將已有的臨時數據傳輸到Datanode中,并告知Namenode寫數據完成;
Namenode將該文件改變為持久的一致性狀態,也就事將該操作記錄到日志EditLog中。如果此時Namenode宕掉,那么文件信息丟失。
上面的過程主要特點是寫入數據先緩存到本地,在達到塊大小限制時才與Datanode通信進行傳輸。這樣的好處在于避免在客戶寫數據的過程中持續占用網絡帶寬,這對于處理多用戶大量數據的寫入是非常關鍵的。
二、數據備份
數據的寫入同時伴隨這數據塊的備份,過程如下:
在客戶端臨時數據達到一個塊時,與Namenode通信,得到一組Datanode地址,這些Datanode就是用來存儲該數據塊的;
客戶端首先將該數據塊發送到一個Datanode上,Datanode在接受時是以4kb為單位進行,我們把這些小單位稱為緩存頁(參考了Linux管道文件的說法);
對于第一個接到數據的Datanode,它把緩存頁中的數據寫入自己的文件系統,另一方面,它又將這些緩存頁傳送給下一個Datanode;
重復3的過程,第二個Datanode又將緩存頁存儲在本地文件系統,同時將它傳送給第三個Datanode;
如果HDFS中的備份數目設置為3,那么第三個Datanode就只需要將緩存頁存儲即可。
上面的過程中,數據塊從客戶端流向第一個Datanode,然后再流向第二個,從第二個再到第三個,整個是一個流水線過程,中間不會有停頓。所以HDFS將它稱為Replication Pipelining。
為什么不采取客戶端同時向多個Datanode寫數據的方法呢?其實從Pipelining這個稱呼上就可以猜到,客戶端和Datanode采用的緩存文件都是管道文件,即只支持一次讀取。
三、 數據刪除
HDFS中的數據刪除也是比較有特點的,并不是直接刪除,而是先放在一個類似回收站的地方(/trash),可供恢復。
對于用戶或者應用程序想要刪除的文件,HDFS會將它重命名并移動到/trash中,當過了一定的生命期限以后,HDFS才會將它從文件系統中刪除,并由Namenode修改相關的元數據信息。并且只有到這個時候,Datanode上相關的磁盤空間才能節省出來,也就是說,當用戶要求刪除某個文件以后,并不能馬上看出HDFS存儲空間的增加,得等到一定的時間周期以后(現在默認為6小時)。
對于備份數據,有時候也會需要刪除,比如用戶根據需要下調了Replicaion的個數,那么多余的數據備份就會在下次Beatheart聯系中完成刪除,對于接受到刪除操作的Datanode來說,它要刪除的備份塊也是先放入/trash中,然后過一定時間后才刪除。因此在磁盤空間的查看上,也會有一定的延時。
那么如何立即徹底刪除文件呢,可以利用HDFS提供的Shell命令:bin/hadoop dfs expunge清空/trash。
-
存儲
+關注
關注
13文章
4341瀏覽量
86030 -
Hadoop
+關注
關注
1文章
90瀏覽量
15996
原文標題:Hadoop分布式存儲與傳統SQL存儲比較及存儲操作描述
文章出處:【微信號:cunchujie,微信公眾號:存儲界】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論