文章內容摘自書籍,網際網路的部落格的一些集合和個人的理解。
hdfs原理
hadoop提供了可靠的共享儲存和分析的系統,hdfs實現儲存,mapreduce實現分析處理,這兩部分是hadoop的核心,
由於hdfs是為了高資料吞吐量而優化的,是以高時間延遲為代價,所以要求低延遲的資料訪問應用不適合在hdfs上執行。
概念:hdfs和作業系統一樣,也是按塊來儲存的,但塊會比作業系統的的大的多,預設為64mb作為獨立的儲存單元,也可以自行設定(例如128mb),但和其他作業系統不同的是,小於乙個塊大小的檔案不會佔據整個塊的空間,塊的大小的設定影響定址的時間。
在一般情況下hdfs cluster主要包括乙個namenode和多個datanode組成,大多數情況下,會有單獨的一台機執行namenode例項,客戶端通過乙個可配置的tcp埠鏈結到namenode,namenode,datanode之間通過遠端過程呼叫rpc進行通訊。
本圖來自ibm
在各節點的通訊中,namenode可以看作是datanode的管理者和仲裁者,它不會主動發起請求(防止負載過大),而是對客戶端或者datanode發起的請求進行響應,每個datanode都會維護乙個開放的socket,支援客戶端或者其他datanode進行讀寫操作,namenode知道該socket和主機的位置和埠。
現在來解釋每個名詞的的作用
namenode:作用是管理檔案系統的命名空間
--將所有的檔案和資料夾的資料儲存在檔案系統系統樹中。
--這些資訊在硬碟上儲存:命名空間映象(fsimage 它是一種序列化的檔案格式,不支援硬碟的直接修改)和修改日誌(editlog)
--儲存檔案包含的哪些資料塊,分布在哪些節點。這些資料是從檔案系統啟動的時候,通過從資料節點向namenode傳送的資料報獲取的。
datanode:真正儲存資料的地方
--client可以向資料節點請求寫入或者讀取出資料塊
--週期性的向namenode回報儲存資料塊的資訊。
secondary namenode(不是元資料出現問題的備用節點)
--主要功能是週期性的將namenode的fsimage和editlog進行合併,以防止日誌檔案過大
--保留合併後的命名空間映象檔案,以防止資料節點失敗的時候可以恢復。
fsimage和editlog
當檔案系統客戶端(client)進行寫的操作的時候,首先會把它記錄在修改它日誌(editlog)的檔案中
在記錄了修改日誌後,namenode節點檔案系統那個記憶體中的資料結構
每次寫操作成功之前,修改日誌都會同步到檔案系統中
當namenode資料節點失敗後,最新的checkpoint會將fsimage載入到記憶體中,然後執行editlog的操作
checkpoint的過程如下:
-snn通知nn生成新的日誌檔案,並把日誌都寫到editlog中
-snn用http get 的方法從nn那裡獲得faimage檔案和editlog檔案
-snn把fsimage檔案載入到記憶體中,執行日誌檔案的操作,生成新的fsimage
-snn把用http post把fsimage傳回nn中
-nn提換fsimage,更新fstime檔案,寫入checkpoint時間
這樣nn的日誌檔案就不會很大了。
了解完這些之後,來講一下關於client如何寫入資料和讀取資料
關於寫入資料:
-客戶端首先會將資料進行分塊,然後會向nn傳送請求,詢問資料塊應該存放的位置
-nn就會返回一些每個資料塊應該存放的列表,在預設情況下,資料會被複製三份,乙份放在本機架上,另外的兩份會放在另外的機架上(這裡還分兩種情況,不詳細談)
-在client獲取到要存放機器的位置的列表後,就通過rpc和datanode相連,並向第乙個datanode寫入資料
-寫完資料後,第乙個datanode就會與第二個datanode進行通訊並寫入,再由第二個寫入到第三個
-client收到寫入成功的訊息後並通知nn
在這裡1tb file = 3tb storage 3tb network traffic
datanode會傳送心跳包去告訴nn關於本台機上資料的狀態
nn從這裡報告中去建立資料塊的元資訊
如果在這時候,nn掛了,意味著hdfs也掛了
關於讀取資料:
client向nn獲取每個資料塊的datanode的列表,並挑選每個列表的第乙個datanode
然後就讀取資料
關於client:
當客戶端建立檔案的時候,並沒有立即將其傳送給nn,而是將檔案儲存在本地的臨時檔案中,這個操作對使用者來說是透明的
,當臨時檔案累計到達乙個資料塊的大小後,才會聯絡nn,nn才會將檔名插入到檔案系統的層次結構中,然後分配乙個資料塊給它,返回datanode的標誌符給客戶端,然後客戶端才把資料寫入到datanode上,當檔案關閉的時候也會將剩餘部分的檔案上傳到datanode上,告訴nn檔案已將關閉,這是nn才將檔案的建立操作提交到了hdfs,這種方式能夠很好的減少網路的請求,避免了網路的擁堵,提高了吞吐量
最後修改日期:2013/10/16
hadoop學習筆記(HDFS)
hdfs的設計基礎與目標 1 硬體錯誤是常態,因此需要冗餘。2 為大資料而生,流式讀寫,批量讀取而非隨機讀寫。擅長資料分析而不是事務處理。3 大規模資料集。4 一次寫多次讀邏輯設計,即一旦寫入,只能讀,不能修改。5 程式才用 資料就近 原則分配節點執行。hdfs的可靠性 冗餘副本策略 機架策略 心跳...
hadoop學習筆記(二) HDFS
定義 hdfs hadoop distributed file system 它是乙個檔案系統,用於儲存檔案,通過目錄樹來定位檔案,它是分布式的,由很多伺服器聯合起來實現其功能。場景 適合一次寫入,多次讀出的場景,且不支援檔案的修改,適合用來做資料分析,不適合做網盤應用。優點 1.高容錯性 資料儲存...
HADOOP學習筆記(一) HDFS
hdfs,它是乙個檔案系統,用於儲存檔案,通過目錄樹來定位檔案 其次,它是分布式的,由很多伺服器聯合起來實現其功能,集群中的伺服器有各自的角色。hdfs的設計適合一次寫入,多次讀出的場景,且不支援檔案的修改。適合用來做資料分析,並不適合用來做網盤應用。namenode 它維護著整個檔案系統的檔案資料...