hadoop學習筆記-HDFS原理

文章內容摘自書籍,互聯網的博客的一些集合和我的的理解。 node

HDFS原理 網絡

hadoop提供了可靠的共享存儲和分析的系統,HDFS實現存儲,MapReduce實現分析處理,這兩部分是hadoop的核心,因爲HDFS是爲了高數據吞吐量而優化的,是以高時間延遲爲代價,因此要求低延遲的數據訪問應用不適合在HDFS上運行。 數據結構


概念: socket

HDFS和操做系統同樣,也是按塊來存儲的,但塊會比操做系統的的大的多,默認爲64MB做爲獨立的存儲單元,也能夠自行設置(例如128MB),但和其餘操做系統不一樣的是,小於一個塊大小的文件不會佔據整個塊的空間,塊的大小的設置影響尋址的時間。 oop


在通常狀況下HDFS cluster主要包括一個NameNode和多個DataNode組成,大多數狀況下,會有單獨的一臺機運行namenode實例,客戶端經過一個可配置的TCP端口連接到NameNode,NameNode,dataNode之間經過遠程過程調用RPC進行通訊。 優化

本圖來自IBM spa

在各節點的通訊中,NameNode能夠看做是datanode的管理者和仲裁者,它不會主動發起請求(防止負載過大),而是對客戶端或者dataNode發起的請求進行響應,每一個datanode都會維護一個開放的socket,支持客戶端或者其餘datanode進行讀寫操做,namenode知道該socket和主機的位置和端口。 操作系統


如今來解釋每一個名詞的的做用 .net

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

CSDN博客:http://blog.csdn.net/shangwen_

相關文章
相關標籤/搜索