hadoop之分布式檔案管理系統HDFS

2022-09-07 17:24:19 字數 3205 閱讀 8600

hdfs(hadoop distributed file system),它是乙個檔案系統,用於儲存檔案,通過目錄樹來定位檔案;其次,它是分布式的,由很多伺服器聯合起來實現其功能,集群中的伺服器有各自的角色。hdfs的使用場景:適合一次寫入,多次讀出的場景,且不支援檔案的修改。適合用來做資料分析,並不適合用來做網盤應用

優點:

缺點:

(1)namenode:就是master他是乙個主管,管理者。管理hdfs的命名空間,配置副本資訊,管理資料塊對映資訊,處理客戶端讀寫請求。

(2)dataname:就是sl**e,namenode下達命令,datanode執行實際的操作。儲存實際的資料塊,執行資料塊的讀寫操作

(3)client:就是客戶端。檔案切分。檔案上傳hdfs的時候,client將檔案切分成乙個乙個的block,然後進行上傳;與namenode互動,獲取檔案的位置資訊;與datanode互動,讀取或者寫入資料;client提供一些命令來管理hdfs,比如namenode格式化;client可以通過一些命令來訪問hdfs,比如對hdfs增刪查改操作;

(4)secondary namenode,並非namenode的熱備。當namenode掛掉的時候,它並不能馬上替換namenode並提供服務。輔助namenode,分擔其工作量,比如定期合併fsimage和edits,並推送給namenode ;在緊急情況下,可輔助恢復namenode。

1)客戶端通過distributed filesystem模組向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。

2)namenode返回是否可以上傳。

3)客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。

4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。

5)客戶端通過fsdataoutputstream模組請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成。

6)dn1、dn2、dn3逐級應答客戶端。

7)客戶端開始往dn1上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取),以packet為單位,dn1收到乙個packet就會傳給dn2,dn2傳給dn3;dn1每傳乙個packet會放入乙個應答佇列等待應答。

8)當乙個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)。

2)挑選一台datanode(就近原則,然後隨機)伺服器,請求讀取資料。

3)datanode開始傳輸資料給客戶端(從磁碟裡面讀取資料輸入流,以packet為單位來做校驗)。

4)客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。

首先想一下namenode的元資料是儲存在**呢?我們先做乙個假設,如果儲存在namenode節點的磁碟中,因為經常需要進行隨機訪問,還有響應客戶端的請求,必然是效率過低。因此,元資料需要存放在記憶體中,但是如果只存在記憶體中,一旦斷電,元資料丟失,整個集群就無法工作了,因此產生在磁碟中的備份元資料fsimage。

這樣有帶來新的問題,當記憶體中共的元資料更新時,如果同時更新fsimage,就會導致效率過低,如果不更新,就會發生一致性問題,一旦namenode節點斷電,就會產生資料丟失。因此,引入edits檔案(只進行追加操作,效率很高)。每當元資料有更新或者新增元資料時,修改記憶體中的元資料並追加到edits中,這樣,一旦namenode節點斷電,可以通過fsimage和edits的合併,合成元資料。

但是,如果長時間新增資料到edits中,會導致該檔案資料過大,效率降低,而且一旦斷電,恢復元資料需要的時間過長。因此,需要定期進行fsimage和edits的合併,如果這個操作由namenode節點完成,又會效率過低。因此,引入乙個新的節點secondarynamenode,專門用於fsimage和edits的合併。

第一階段:namenode啟動

(1)第一次啟動namenode格式化後,建立fsimage和edits檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。

(2)客戶端對元資料進行增刪改的請求。

(3)namenode記錄操作日誌,更新滾動日誌。

(4)namenode在記憶體中對元資料進行增刪改。

第二階段:secondary namenode工作

​ (1)secondary namenode詢問namenode是否需要checkpoint。直接帶回namenode是否檢查結果。

​ (2)secondary namenode請求執行checkpoint。

​ (3)namenode滾動正在寫的edits日誌。

​ (4)將滾動前的編輯日誌和映象檔案拷貝到secondary namenode。

​ (5)secondary namenode載入編輯日誌和映象檔案到記憶體,並合併。

​ (6)生成新的映象檔案fsimage.chkpoint。

​ (7)拷貝fsimage.chkpoint到namenode。

​ (8)namenode將fsimage.chkpoint重新命名成fsimage。

1)乙個資料塊在datanode上以檔案形式儲存在磁碟上,包括兩個檔案,乙個是資料本身,乙個是元資料報括資料塊的長度,塊資料的校驗和,以及時間戳。

2)datanode啟動後向namenode註冊,通過後,週期性(1小時)的向namenode上報所有的塊資訊。

3)心跳是每3秒一次,心跳返回結果帶有namenode給該datanode的命令如複製塊資料到另一台機器,或刪除某個資料塊。如果超過10分鐘沒有收到某個datanode的心跳,則認為該節點不可用。

4)集群執行中可以安全加入和退出一些機器。

該datanode的命令如複製塊資料到另一台機器,或刪除某個資料塊。如果超過10分鐘沒有收到某個datanode的心跳,則認為該節點不可用。

4)集群執行中可以安全加入和退出一些機器。

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...

TransactionScope 之分布式配置

本文 transactionscope是個好東西,可以自動管理transaction,即使是對分布式資料庫也可以,但是需要一些配置 摸索了2天。本文的環境為windows 2003 1.對跑 的機器和sql所在的伺服器進行component services的配置 administative too...

事務管理之分布式事務

當資料庫單錶一年產生的資料超過1000w,那麼就要考慮分庫分表,具體分庫分表的原理在此不做解釋,以後有空詳細說,簡單的說就是原來的乙個資料庫變成了多個資料庫。這時候,如果乙個操作既訪問01庫,又訪問02庫,而且要保證資料的一致性,那麼就要用到分布式事務。所謂的soa化,就是業務的服務化。比如原來單機...