HDFS寫數(shù)據(jù)流程

1). 客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標文件是否已存在,父目錄是否存在。
3). NameNode返回是否可以上傳。
5). 客戶端請求第一個 block上傳到哪幾個datanode服務器上。
7). NameNode返回3個datanode節(jié)點,分別為dn1、dn2、dn3。
8). 客戶端通過FSDataOutputStream模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)調(diào)用dn2,然后dn2調(diào)用dn3,將這個通信管道建立完成。
9). dn1、dn2、dn3逐級應答客戶端。
10). 客戶端開始往dn1上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。
當一個block傳輸完成之后,客戶端再次請求NameNode上傳第二個block的服務器。(重復執(zhí)行5-11步)。
在傳輸過程中,如果dn2、dn3掛了,則NameNode在接收到到Client傳輸完成時,會檢查副本數(shù)量是否足夠,不夠的話異步復制少的副本。如果dn1掛了,那么client會再次請求NameNode,再獲取幾個節(jié)點,NameNode將之前元數(shù)據(jù)修改,并讓對應dn刪除對應數(shù)據(jù)
HDFS讀數(shù)據(jù)流程

1). 客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數(shù)據(jù),找到文件塊所在的DataNode地址。
3). 挑選一臺DataNode(就近原則,然后隨機)服務器,請求讀取數(shù)據(jù)。
4). DataNode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以packet為單位來做校驗)。
5). 客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。