hdfs中的資料都是分塊儲存的,預設塊大小為64m,這個值可以從hdfs配置檔案中更改dfs.blocksize。這樣分快處理的好處是可以增加讀取資料的吞吐量,因為可以同時從讀取檔案的不同分塊。
在客戶端想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開啟、讀取、寫入檔案的操作,覺先博文hadoop學習總結之二:hdfs讀寫過程解析 給出了很好的說明,可供參考。
上面寫的內容,基本上是來自hdfs官方文件,然後稍微加上一些自己的看法,很多地方也沒有從hadoop原始碼中去求證。如果有不對的地方,還請高手指正,不勝感激!
hadoop學習筆記(HDFS)
hdfs的設計基礎與目標 1 硬體錯誤是常態,因此需要冗餘。2 為大資料而生,流式讀寫,批量讀取而非隨機讀寫。擅長資料分析而不是事務處理。3 大規模資料集。4 一次寫多次讀邏輯設計,即一旦寫入,只能讀,不能修改。5 程式才用 資料就近 原則分配節點執行。hdfs的可靠性 冗餘副本策略 機架策略 心跳...
hadoop學習 HDFS詳細學習
1 hdfs概念 hadoop distributed file system,簡稱hdfs,是乙個分布式檔案系統。hdfs是高容錯性的,可以部署在低成本的硬體之上,hdfs提供高吞吐量地對應用程式資料訪問,它適合大資料集的應用程式。2 hdfs 設計目標 hdfs不適合做什麼 儲存小檔案 大量隨機...
Hadoop學習(二) HDFS介紹
隨著資料量越來越大,在乙個作業系統存不下所有的資料,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,迫切需要一種系統來管理多台機器上的檔案,這就是分布式檔案管理系統。hdfs只是分布式檔案管理系統中的一種。hadoop分布式檔案系統,主要用來解決海量資料的儲存問題 它是乙個檔案系統,用...