簡介:
儲存模型為:位元組,
以檔案切割成塊,
單一檔案大小一致,檔案與檔案間可以不一致。
其可以設定副本數,副本數不可超過節點數量。
只支援一次寫入多次讀取,可追加資料。
架構模型:
namenode節點儲存檔案的元資料:單節點
datanode節點儲存檔案block資料:多節點
datanode與namenode保持心跳,提交block列表。
hdfsclient與namenode互動元資料資訊
hdfsclient與dataname互動檔案block資料。
備註:塊的副本沒有主從之分。
namenode是基於記憶體儲存的,不會和磁碟發生交換。在記憶體中,具有持久化。(開機啟動的時候會把寫到磁碟中的資料讀取一遍,因為在記憶體中的資料開機後會消失的)
其主要功能為,接受客戶端的讀寫服務,以及收集datanode匯報的block列表資訊。其儲存的dn的資訊包括,owership和permissions,檔案大小時間,block列表中的偏移量。但是不存位置資訊。其會在收集心跳的時候完成位置資訊的更新。
1.datanode:
dn儲存的資料的實體和block的元資料資訊檔案,啟動dn時會想nn匯報block資訊。dn有對塊可靠性的保證, 每個節點在收完塊轉成檔案存的時候,經過md5等演算法生成乙個值,為了驗證資料可靠性的 。客戶端取的時候取完後需要驗證可靠性。如果有問題,會通知dn刪除次塊。然後取其他的副本。此外,dn通過想nn傳送心跳保持與其聯絡(3s一次),如果nn10分鐘沒有收到dn的心跳,則認為其已經掛掉了。並copy其上的block到其他dn 。通過複製的block塊資訊,讓其他dn複製乙份副本。
2.namenode的持久化:
nn的metadate資訊會在開機啟動後載入到記憶體。其儲存到磁碟的檔名為:fsimage,block塊的資訊不會儲存到fsimage映象。fsimage相當與寫快照到磁碟一樣。時點的操作。另外乙個實時的,叫:edits,客戶端的操作記錄會以追加的形式在edits裡追加,像記錄日誌一樣。 fhds是兩者結合使用的。 比如,某個時刻出現掛機,處理辦法為讀取fsimage+edits。
3.secondary namenode的工作過程:
在hadoop1.x的時候,namenode是單節點的。處理fsimage和edits為不影響namenode的工作壓力,用secondary namenode來完成fsimage和edits合併並推向namenode。(snn可根據配置檔案設定的時間間隔fs.checkperiod預設的3600s。還可以根據配置檔案設定edits log大小fs.checkpoint.size檔案預設大小為64m)。將2個檔案載入進記憶體,寫成乙個新的fsimage。當sn把新的fsimage推過來後,nn有乙個新的fsimage和乙個剛才新建的edits。如果某個時刻掛機,將fsimage和edits一執行,就會有恢復掛機前的狀態。
此外,在sn取走fsimage和edits的時候,nn會自己生成乙個新的edits。然後當snn推送來的合併完的新的fsimage的時候,會再次取走剛才新的editss,並再次完成一次合併和推送。
在開機的時候,nn產生乙個空的fsimage和乙個空的edits。然後將2者載入進記憶體後產生乙個新的fsimage和edits。
在hadoop2.x的時候有了active nn 和 standby nn .
4.block塊副本放置策略
開源社群是如上圖所示方式策略。
第乙個副本:放置在上傳檔案的dn;如果是集群外提交,則隨機挑選一台磁碟不太滿,cpu不太忙的節點。
第二個副本:放置在於第乙個副本不同的 機架的節點上。
第三個副本:與第二個副本相同機架的節點。
更多副本:隨機節點
5.hdfs寫流程
首先客戶端通過pipeline 的方式傳輸資料, 先把乙個比如64m的檔案傳遞給以下幾個dn,它只需要傳個乙個dn即可。而且傳遞的顆粒是更小的,比如只有64k。然後傳輸完第乙個dn後,dn會通過tcp的方式傳給第二個dn,以此類推。(dn接收完會給客戶端返回成功的時候會立刻把此塊傳給下乙個dn)l傳輸過程其他的dn掛掉了,比如第二個dn掛了,會通知第乙個dn,此時dn通知客戶端,客戶端通知nn,nn把掛掉的dn拉入黑名單。然後第乙個節點的dn會自動跟第三個dn建立tcp連線。並有斷點續傳。當客戶端把64m按小包64k傳輸完了會想nn要第二個塊的資訊。然後以同樣的方式傳給其他的dn。此外,當傳輸完成後,已完成傳輸的dn會和nn完成心跳,然後nn發現有掛的dn,會通知沒掛的某個dn複製塊到掛掉並開啟的dn上。
備註:客戶端傳輸給其他dn和完成傳輸的dn和nn完成心跳並複製的過程是同步的。時間軸是重疊並行的。
6.hdfs讀流程
client:
和nn獲取一部分block副本位置列表
線性和dn獲取block,最終合併為乙個檔案
在block副本列表中按距離擇優選取
移動完的塊後的計算是hdfs的io流讀的。不是到本地計算機開啟的io流讀。是拿的hdfs給的io流。
7.hdfs檔案許可權 posix
與linux檔案許可權類似
r: read; w:write; x:execute
許可權x對於檔案忽略,對於資料夾表示是否允許訪問其內容
如果linux系
統使用者zhangsan使用hadoop命令建立乙個檔案,那麼這個檔案在hdfs中owner就是zhangsan。
hdfs的許可權目的:阻止好人錯錯事,而不是阻止壞人做壞事。hdfs相信,你告訴我你是誰,我就認為你是誰
它沒有自己的使用者系統。建立者是什麼使用者建立什麼型別的許可權。有對應的許可權操作檔案。
8.安全模式
namenode啟動的時候,首先將映像檔案(fsimage)載入記憶體,並執行編輯日誌(edits)中的各項操作。
一旦在記憶體中成功建立檔案系統元資料的對映,則建立乙個新的fsimage檔案(這個操作不需要secondarynamenode)和乙個空的編輯日誌。
此刻namenode執行在安全模式。即namenode的檔案系統對於客服端來說是唯讀的。(顯示目錄,顯示檔案內容等。寫、刪除、重新命名都會失敗)。
在此階段namenode收集各個datanode的報告,當資料塊達到最小副本數以上時,會被認為是「安全」的,在一定比例(可設定)的資料塊被確定為「安全」後,再過若干時間,安全模式結束
當檢測到副本數不足的資料塊時,該塊會被複製直到達到最小副本數,系統中資料塊的位置並不是由namenode維護的,而是以塊列表形式儲存在datanode中。
備註:
hadoop1.x的時候乙個nn掛掉了,需要等30分鐘才能啟動。
nn在所有的
9.總結:
集群 角色==程序
namenode
資料元資料
記憶體儲存,不會有磁碟交換
持久化(fsimage,eidts log)
不會持久化block的位置資訊
block:偏移量,因為block不可以調整大小,hdfs,不支援修改檔案
偏移量不會改變
datanode
block塊
磁碟 面向檔案,大小一樣,不能調整
副本數,調整,(備份,高可用,容錯/可以調整很多個,為了計算向資料移動)
sn nn&dn
心跳機制
dn向nn匯報block資訊
安全模式
client
hdfs相關問題
1.我有一萬個元素 比如數字或單詞 需要儲存?如果查詢某乙個元素,最簡單的遍歷方式複雜的是多少?如果我期望複雜度是o 4 呢?2.有乙個非常大的文字檔案,裡面有很多很多的行,只有兩行一樣,它們出現在未知的位置,需要查詢到它們。3.2000臺真的比一台速度快嗎?如果考慮分發上傳檔案的時間呢?如果考慮每...
HDFS分布式原理 概念篇
hdfs分布式系統 2018年10月9日 11 50 什麼是大資料 短時間內快速的產生海量的多種多樣的有價值的資料 大資料的技術 分布式儲存 分布式計算 分布式批處理 資料積攢一段時間,在未來某一時刻一次性計算一批資料 分布式流處理 資料實時進行計算,產生一條計算一條 需要注意的是 角色在集群中都是...
HDFS概念詳解 塊
乙個磁碟有它的塊大小,代表著它能夠讀寫的最小資料量。檔案系統通過處理大小為乙個磁碟塊大小的整數倍數的資料塊來運作這個磁碟。檔案系統塊一般為幾千位元組,而磁碟塊一般為512個位元組。這些資訊,對於僅僅在乙個檔案上讀或寫任意長度的檔案系統使用者來說是透明的。但是,有些工具會維護檔案系統,如df 和 fs...