hdfs的副本數為啥增加了 分布式儲存系統HDFS

2021-10-14 12:37:35 字數 4047 閱讀 4749

hdfs:是hadoop分布式檔案儲存系統

hdfs就是將檔案切分成固定大小的資料塊block(檔案嚴格按照位元組來切,所以若是最後切得省一點點,也算單獨一塊,hadoop2.x預設的固定大小是128mb,不同版本,預設值不同.可以通過client端上傳檔案設定),

儲存到不同的節點上,預設的情況下每個block有三個副本.(儲存三個副本的原因是為了防止裝置崩潰,導致檔案無法使用,若是其中乙個副本損壞則可以換乙個伺服器,保證執行,一台節點上可以複製不同的block副本).

副本在上傳完畢之後就不可以更改大小,但是副本的數量可以變更

每個block分散儲存在集群中,每個block大小一致,除非是最後剩餘一點點.檔案與檔案之間的block可以不一致.block的副本數不要超過節點的數量.這樣就冗餘了,

namenode:主要接受客戶端的讀/寫服務,收集datenode匯報的block列表資訊.hdfs clinet客戶端,通過secondary namenode到namenode那裡獲取副本的位址,來讀取存入資料.namenode採用記憶體儲存元資料(元資料:filename block 位址 許可權 時間 總之就是與檔案內容不相關的資訊叫做元資料.與之相對的源資料就是檔案的內容),所以特點是:不會和磁碟發生交換(就是將那些源資料資訊儲存在記憶體中,由secondary namenode來將namenode中的資料傳入磁碟中,而namenode只是做乙個管理的作用),只存在記憶體中.並且持久化

元資料metadata包含:檔案owership(歸屬)和permissions(許可權),檔案大小,時間.block列表:block偏移量 ,位置資訊(不會持久化,因為會變):block儲存在哪個datanode資訊(由datanode啟動時上報,不儲存在磁碟)

namenode的metadata資訊在啟動後會載入到記憶體,再由secondary namenode儲存到磁碟檔案,名為:」fsimage」,block位置則不會儲存到fsimage檔案,因為位置資訊不會持久化.edits記錄對metadata的操作日誌,類似於虛擬機器的快照,但是和快照不一樣.editslog儲存自最新檢查點後的元資訊變化,客戶端修改檔案的時候先寫到editlog,成功後才更新記憶體中的metadata.所以metadata = fsimage+editslog

**解釋:

fsimage是儲存元資料到磁碟.然後每隔乙個小時儲存記錄一次,所以當12點30分的時候客戶端操作建立老王,namenode**現了f3檔案資訊,但是此時出現了宕機,先通過fsimage恢復檔案,但是這個時間並沒有到儲存時間,所以f3.老王這個檔案不存在.而如果是12點30分客戶端操作建立老王,建立的時候會先將操作日誌儲存到editlog中,再儲存到namenode中,若此時宕機,先將fsimage的磁碟資料恢復到namenode中,然後在讀取editlog,然後就需要操作一遍日誌,則會再次建立一次f3則可以完美解決.所以每當fsimage儲存一次,就可以把日誌刪除一次,否則日誌將會越來越大.

總之客戶端操作是肯定是先記錄到日誌裡再儲存到記憶體中.

datenode:本地儲存資料(block),檔案形式,儲存block的元資料(md5值)資訊檔案.datenode會向namenode匯報block資訊.通過向namenode傳送心跳保持聯絡,如果namenode10分鐘沒有收到datenode的心跳,則認為其已經lost,並複製原來datenode上面的block到其他datenode.

secondarynamenode:幫助namenode合併edits.log檔案,減少namenode啟動的時間,他不是namenode的備份.

snn執行合併的時間和機制:

1.根據配置檔案設定的時間間隔fs.checkpoint.period預設3600秒.

2.根據配置檔案設定edits.log大小fs.checkpoint.size規定edits檔案的最大值預設是64mb

secondarynamenode snn合併流程:首先從namenode的fsimage和edits檔案通過網路拷貝,到達snn伺服器中,拷貝的同時,使用者的實時在運算元據,那麼nn中就會從新生成乙個edits來記錄使用者的操作,而另一邊的snn將拷貝過來的edits和fsimage進行合併,合併之後就替換nn中的fsimage。之後nn根據fsimage進行操作(當然每隔一段時間就進行替換合併,迴圈)。當然新的edits與合併之後傳輸過來的fsimage會在下一次時間內又進行合併.

block的副本放置策略:第乙個副本放置在上傳檔案的dn,如果是集群外提交,則隨機挑選一台磁碟不太滿,cpu不太忙的節點.第二個副本:放置在與第乙個副本不同的機架節點上.第三個副本:雨蝶二個副本相同機架的不同節點.多出的副本則放隨機節點.

hdfs讀寫檔案流程:

1.hdfs client客戶端先建立dfs然後向 namenode詢問副本位址,副本數,然後客戶端得到位址後再通過管道傳輸(pipeline of datanodes)給datanode傳輸檔案(把要傳輸的檔案分成乙個個的小包裹package,然後乙個包裹傳完再通過當前那個datenode向下乙個datanode傳輸,依次傳輸)block傳輸結束後,dn向namenode匯報block資訊,dn向客戶端匯報完成,客戶端向nn匯報完成,然後獲取下乙個block存放的dn列表,nn會在寫流程中更新檔案狀態

2.讀檔案過程:hdfs cline客戶端先開啟dfs系統,然後向nn獲取一部分的block副本位置列表.然後獲取block最終合併為乙個檔案.在通過datanode獲取block中,採用就近原則.

hdfs檔案許可權:與linux檔案許可權類似.r:read,w:write,x:execute其中許可權x對於檔案忽略,對於資料夾表示是否允許訪問其內容.如果linux系統使用者zhangsan使用hadoop命令建立檔案,那麼這個檔案在hdfs中的owner就是張三.hdfs的許可權目的:阻止好人做錯事,而不是阻止壞人做壞事.hdfs相信,你告訴我你是誰,我就認為你是誰.

hdfs的安全模式:namenode啟動的時候,首先將映像檔案(fsimage)載入記憶體,並執行編輯日誌(edits)中的各項操作。一旦在記憶體中成功建立檔案系統元資料的對映,則建立乙個新的fsimage檔案(這個操作不需要secondarynamenode)和乙個空的編輯日誌.此刻namenode執行在安全模式。即namenode的檔案系統對於客服端來說是唯讀的。(顯示目錄,顯示檔案內容等。寫、刪除、重新命名都會失敗)在此階段namenode收集各個datanode的報告,當資料塊達到最小副本數以上時,會被認為是「安全」的, 在一定比例(可設定)的資料塊被確定為「安全」後,再過若干時間,安全模式結束.

當檢測到副本數不足的資料塊時,該塊會被複製直到達到最小副本數,系統中資料塊的位置並不是由namenode維護的,而是以塊列表形式儲存在datanode中。

hdfs的優缺點

1.優點:

– 高容錯性

• 資料自動儲存多個副本

• 副本丟失後,自動恢復

– 適合批處理

• 移動計算而非資料

• 資料位置暴露給計算框架(block偏移量)

– 適合大資料處理

• gb 、tb 、甚至pb 級資料

• 百萬規模以上的檔案數量

• 10k+ 節點

– 可構建在廉價機器上

• 通過多副本提高可靠性

• 提供了容錯和恢復機制

2.缺點:

- 低延遲高資料吞吐訪問問題

• 比如支援秒級別反應,不支援毫秒級

• 延遲與高吞吐率問題(吞吐量大但有限制於其延遲)

- 小檔案訪問

• 占用namenode 大量記憶體

• 尋道時間超過讀取時間

- 併發寫入、檔案隨機修改

• 乙個檔案只能有乙個寫者

微軟增加了對Power BI的Python支援

microsoft的業務分析和資料報告套件power bi現在通過power bi 2018年8月版中的功能預覽與python程式語言整合。如概述該發行版的部落格文章所述,python指令碼可以直接在power bi desktop應用程式內部執行,並且可以用於 資料清理,分析和視覺化 infowo...

今天增加了乙個IT管理的分類

算起來也做了好幾年的it了。回想一下,總結起來也就是積累了一些技術經驗,培養成了乙個萬能手,什麼都會點,什麼都搞不精,還好我學習能力還沒有老化,希望以後可以精於一門。說起來現在我還算年輕比較有優勢,努力在學習一些管理的東西,包括財務等各個方面。因為我始終相信乙個老師跟我說過的一句話 機遇偏愛有準備的...

今天增加了乙個IT管理的分類

算起來也做了好幾年的it了。回想一下,總結起來也就是積累了一些技術經驗,培養成了乙個萬能手,什麼都會點,什麼都搞不精,還好我學習能力還沒有老化,希望以後可以精於一門。說起來現在我還算年輕比較有優勢,努力在學習一些管理的東西,包括財務等各個方面。因為我始終相信乙個老師跟我說過的一句話 機遇偏愛有準備的...