client讀寫hdfs的原始碼分析總結

2021-05-23 07:10:02 字數 526 閱讀 5962

週末花了一天的時間仔細了重溫了一下client對hdfs檔案的讀寫過程,總結如下:

每次讀寫都是以乙個資料塊的形式來進行的,並且包括資料內容和資料的校驗值。另外,到

namenode

上獲取相應的資訊都是用

rpc來通訊的,而到

datanode

獲取真正的資料塊內容是由

socket

的網路流來進行的,這是因為二者的通訊資料量還是有些差別的,另外一點是考慮了網路擁塞問題。

同時客戶端為了提高效率,一般都是從

datanode

上讀寫乙個塊大小的資料內容,然後快取到本地記憶體的。另外到

namenode

上讀取資料塊資訊也是類似的,一次性讀取了多個資料塊資訊,快取到本地記憶體,來減少

namenode

的通訊擁塞。

另外,對於分布集群,要重點考慮以下問題:

資料劃分,負載平衡,通訊擁塞,各結點的本地資料管理,資源合理利用,錯誤處理等。

歸根結底就是擴充套件性,可靠性,高效能。

ConcurrentHashMap的原始碼分析

put final v putval k key,v value,boolean onlyifabsent 在上一步的else if中 f 不為null時,則判斷f的hash值是否為moved,即 1,如果為 1,表示正在擴容 else if fh f.hash moved 協助資料遷移 tab h...

DispatcherServlet的原始碼和流程分析

1 自動配置dispatcherservlet和dispatcherservletregistry 2 註冊dispatcherservlet到servletcontext 3 初始化mvc的元件 handler執行完成後,向dispatcherservlet 返回乙個modelandview物件 ...

hdfs的讀寫策略

讀資料過程 1.客戶端呼叫filesystem 例項的open 方法,獲得這個檔案對應的輸入流inputstream 2.訪問namenode,獲取檔案對應資料塊的儲存位置,包括副本位置。3.獲得輸入流之後,客戶端便呼叫read 方法讀取資料。選擇最近的datanode進行連線並讀取資料。4.如果客...