量了一下4個
datanode
時候hdfs
寫操作時每個
node
分配block
的情況,每個
datanode是4
張disk
,寫了個指令碼處理
log後發現平均每個
node
分配的block
數量佔寫的
block
總數量的
25%,而每個
node
上的每個
disk
又分到了
25%的
block
數目。因此,
hdfs
的寫分配演算法相對在我這個
cluster
上還是均勻的。
具體看了一下
code
,選datanode
的演算法是
choosetarget
,這個是大家熟知的了,比如
replication是3
的情況,就是選乙個
local
,然後同乙個
rack
的另外乙個
node
,然後是另外乙個
rack
的乙個node
,這些選擇是隨機的了。 選
disk
(或者說選
block file
的目錄),則是
round-robin
的了。
因此有個疑問就是現在這種演算法對現在這樣每個
node
的每個disk的io
能力是一樣的效果會比較好,那如果不一樣呢,比如一些
node
的某些disk用sd
,相對io
處理會快,那麼理想中就應該給該
node
或者該sd
分配較多的
block
寫操作,現在的演算法就太一視同仁了,能力強的得不到利用,能力差的分配到一樣多的任務。
但不可否認,現在的演算法是最簡潔的,
****** is beauty
。如果要
namenode
選擇datanode
的時候知曉備選的
datanode
上當前寫任務是否繁重的情況也比較難吧。
當然,也會有人說,如果某
datanode
能力強,按照你理想中的應該分配較多的寫,那麼這個
device
不就很快歇菜了……我也沒辦法,只能說更看重什麼吧。
hdfs的讀寫策略
讀資料過程 1.客戶端呼叫filesystem 例項的open 方法,獲得這個檔案對應的輸入流inputstream 2.訪問namenode,獲取檔案對應資料塊的儲存位置,包括副本位置。3.獲得輸入流之後,客戶端便呼叫read 方法讀取資料。選擇最近的datanode進行連線並讀取資料。4.如果客...
HDFS的寫的流程
1 客戶端通過 distributed filesystem 模組向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2 namenode返回是否可以上傳。3 客戶端請求第乙個 block 上傳到哪幾個 datanode 伺服器上。4 namenode返回3個 d...
HDFS的機架感知策略
機架感知是一種計算不同計算節點 tt 的距離的技術,用以在任務排程過程中儘量減少網路頻寬資源的消耗,這裡用盡量,想表達的是當乙個tt申請不到本地化任務時,jt會盡量排程乙個機架的任務給他,因為不同機架的網路頻寬資源比同乙個機架的網路頻寬資源更可貴。當然,機架感知不僅僅用在mr中,同樣還用在hdfs資...