您好,登錄后才能下訂單哦!
這篇文章主要介紹了HDFS讀寫的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、HDFS讀寫之前提
NameNode(元數(shù)據(jù)節(jié)點):存放元數(shù)據(jù)(名稱空間、副本數(shù)、權(quán)限、塊列表、集群配置信息),不包含數(shù)據(jù)節(jié)點。元數(shù)據(jù)節(jié)點將文件系統(tǒng)元數(shù)據(jù)存儲在內(nèi)存中。
1.DataNode(數(shù)據(jù)節(jié)點):真正存儲數(shù)據(jù)的地方,以數(shù)據(jù)塊為單位。默認(rèn)數(shù)據(jù)塊大小為128M。數(shù)據(jù)節(jié)點周期性的將所有存儲塊信息發(fā)送給元數(shù)據(jù)節(jié)點??蛻舳送ㄟ^和NameNode節(jié)點溝通后,再向數(shù)據(jù)節(jié)點對數(shù)據(jù)讀出或?qū)懭搿?/p>
2.SecondaryNameNode(從元數(shù)據(jù)節(jié)點):并不是元數(shù)據(jù)節(jié)點的備用節(jié)點,而是配合元數(shù)據(jù)節(jié)點工作,與元數(shù)據(jù)節(jié)點有不同的工作。SecondaryNameNode周期性地將元數(shù)據(jù)節(jié)點的命名空間鏡像文件和修改日志合并,幫助元數(shù)據(jù)節(jié)點將內(nèi)存中元數(shù)據(jù)信息存儲到磁盤上。
3.Client(客戶端):客戶端就是需要獲取HDFS系統(tǒng)中文件的應(yīng)用程序和接口,引發(fā)HDFS的讀/寫等操作。
值得注意的是:
1.namenode實際客戶端只上傳一個datanode,其余兩個是namenode完成的。讓datenote自己復(fù)制的。然后復(fù)制完成以后逐級返回結(jié)果給namenode。如果2,3datanode復(fù)制失敗,再有namenode分配新的datanode地址。對于客戶端來說默認(rèn)上傳一個datanode就可以了,其余的由datanode自己復(fù)制。
2.datanode切片是由客戶端完成的。datanode第二三個副本的上傳和第一個上傳是異步的。
二、HDFS中的寫流程:
1.根namenode通信請求上傳文件,namenode檢查目標(biāo)文件是否已存在,父目錄是否存在。
2.namenode返回是否可以上傳。
3.client請求第一個 block該傳輸?shù)侥男ヾatanode服務(wù)器上。
4.namenode返回3個datanode服務(wù)器ABC。
5.client請求3臺dn中的一臺A上傳數(shù)據(jù)(本質(zhì)上是一個RPC調(diào)用,建立pipeline),A收到請求會繼續(xù)調(diào)用B,然后B調(diào)用C,將真?zhèn)€pipeline建立完成,逐級返回客戶端。
6.client開始往A上傳第一個block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答。
7.當(dāng)一個block傳輸完成之后,client再次請求namenode上傳第二個block的服務(wù)器。
三、hdfs中的讀流程:
1.跟namenode通信查詢元數(shù)據(jù),找到文件塊所在的datanode服務(wù)器。
2.挑選一臺datanode(就近原則,然后隨機(jī))服務(wù)器,請求建立socket流。
3.datanode開始發(fā)送數(shù)據(jù)。(從磁盤里面讀取數(shù)據(jù)放入流,以packet為單位來做校驗)
4.客戶端以packet為單位接收,先在本地緩存,然后寫入目標(biāo)文件。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“HDFS讀寫的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。