1、服務器類型
- 塔式服務器
- 機架服務器(1U、2U……表示高度)
- 刀片服務器
2、老的網絡規劃層次
接入層 - 彙集層 - 核心層
3、新的網絡規劃層次
接入層(多個接入層接入一個匯聚層) - 匯聚層(很多個)
4、Block的副本放置策略
- 第一個副本:放置在上傳文件的DN;如果是集羣外提交,這隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
- 第二個副本:放置在於第一個副本不同的機架的節點上。
- 第三個副本:與第二個副本相同機架的節點。
- 更多副本:隨機節點
5、寫流程
client開始請求傳文件,NameNode創建一個目錄(檢查文件是否存在),並根據副本創建策略,返回一個排好序的位置信息(沒有寫入),開始根據位置信息開始上傳,當第一個包(1.x版本是64M)上時,將64M切分成多個小文件,採用Pipeline的方式,當第一個小文件上傳到1節點後,由1節點上傳第一個小文件到2節點,同時上傳第二個小文件到1節點,當第一個小文件上傳到2節點後,由2節點上傳第一個小文件到3節點,同時由第一節點上傳第二個小文件到2節點,64M全部傳輸完畢,通過心跳機制,彙報給NameNode,寫入位置信息。並且其中一個節點掛掉,不影響其他節點繼續傳輸,最後彙報之後,由NameNode通知沒有掛掉的節點進行copy操作,最終達到副本數。
Why:
1、client只需要上傳一個節點,三個節點都有
2、當返回第一個64M包開始上傳時,第二個包拿到位置信息,也開始切分上傳
6、讀流程:
- client請求NameNode,下載某一文件,NameNode根據client的位置來將Block在節點的位置進行排序(距離優先),然後返回一個列表給client,然後請求DataNode進行連接下載。
- 通過返回的Block列表,可以取這個文件的某一個部分,例如:0-8Block、3-5Block、6Block等。這就使IO對文件任一位置單獨讀取的能力。
- 客戶端可以是人爲,也可以是計算框架Mapreduce,這樣就可以實現本地化讀取Block,一個Block對應一個Mapreduce。
HDFS分佈式文件系統很好的支撐了計算層本地化讀取。
7、HDFS文件權限 POSIX(一套標準)
- 與Linux文件權限類似
r: read; w:write; x:execute
權限x對於文件忽略,對於文件夾表示是否允許訪問其內容
- 如果Linux系統用戶zhangsan使用hadoop命令創建一個文件,那麼這個文件在HDFS中owner就是zhangsan。
- HDFS的權限目的:阻止好人錯錯事,而不是阻止壞人做壞事。HDFS相信,你告訴我你是誰,我就認爲你是誰。
結合其他技術,實現組織壞人做壞事,例如:
Kerberos :認證 - 節點、用戶、權限
8、安全模式:
- namenode啓動的時候,首先將映像文件(fsimage)載入內存,並執行編輯日誌(edits)中的各項操作。
- 一旦在內存中成功建立文件系統元數據的映射,則創建一個新的fsimage文件(這個操作不需要SecondaryNameNode)和一個空的編輯日誌。
- 此刻namenode運行在安全模式。即namenode的文件系統對於客服端來說是隻讀的。(顯示目錄,顯示文件內容等。寫、刪除、重命名都會失敗)。
- 在此階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是“安全”的, 在一定比例(可設置)的數據塊被確定爲“安全”後,再過若干時間,安全模式結束
- 當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數,系統中數據塊的位置並不是由namenode維護的,而是以塊列表形式存儲在datanode中。
9、總結
①、 集羣
②、角色==進程
namenode
- 數據元數據
- 內存存儲,不會有磁盤交換
- 持久化(fsimage,eidts log)
不會持久化block的位置信息
- block:偏移量,因爲block不可以調整大小,hdfs,不支持修改文件
偏移量不會改變
datanode
- block塊
- 磁盤
- 面向文件,大小一樣,不能調整
- 副本數
調整
備份
高可用,容錯
可以調整很多個,爲了計算向數據移動
SNN
NN&DN
- 心跳機制
- DN向NN彙報block信息
- 安全模式
client