上次小編說(shuō)了讀取數(shù)據(jù)的過(guò)程,今天小編給你說(shuō)說(shuō)怎么寫數(shù)據(jù),這是很重要的知識(shí),跟CGFT考試中的讀數(shù)據(jù)是相對(duì)的哦!
(1)客戶端通過(guò)FileSystem.create()創(chuàng)建文件。
相應(yīng)地,在HDFS文件系統(tǒng)中,DistributedFile System具體實(shí)現(xiàn)了FileSystem,因此,調(diào)用crea0方法后,DistributedFileSystem會(huì)創(chuàng)建輸出流對(duì)象FSDataOutputStream,對(duì)于HDFS而言,具體的輸出流就是DFSOutputStream。
(2)然后,DistributedFileSystem通過(guò)RPC遠(yuǎn)程調(diào)用名稱節(jié)點(diǎn),在文件系統(tǒng)的命名空間中佳建一個(gè)新的文件。名稱節(jié)點(diǎn)會(huì)執(zhí)行一些檢查,比如文件是否已經(jīng)存在,客戶端是否有權(quán)限創(chuàng)建文件等。檢查通過(guò)之后,名稱節(jié)點(diǎn)會(huì)構(gòu)造一個(gè)新文件,并添加文件信息。遠(yuǎn)程方法調(diào)用結(jié)束后,DistributedFileSystem會(huì)利用DFSOutputStream來(lái)實(shí)例化FSDataOutputStream,返回給客戶端,客戶端使用這個(gè)輸出流寫人數(shù)據(jù)。
(3)獲得輸出流FSDataOutputStream以后,客戶端調(diào)用輸出流的write()方法向HDFS中對(duì)應(yīng)的文件寫入數(shù)據(jù)。
(4)客戶端向輸出流FSDataOutputStream中寫入的數(shù)據(jù),會(huì)首先被分成一個(gè)個(gè)的分包,這些分包被放入DFSOutputStream對(duì)象的內(nèi)部隊(duì)列。輸出流FSDataOutputStream會(huì)向名稱節(jié)點(diǎn)申請(qǐng)保存文件和副本數(shù)據(jù)塊的若干個(gè)數(shù)據(jù)節(jié)點(diǎn),這些數(shù)據(jù)節(jié)點(diǎn)形成一個(gè)數(shù)據(jù)流管道。隊(duì)列中的分包*后被打包成數(shù)據(jù)包,發(fā)往數(shù)據(jù)流管道中的*個(gè)數(shù)據(jù)節(jié)點(diǎn),*個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)包發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn),第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)包發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn),這樣,數(shù)據(jù)包會(huì)流經(jīng)管道上的各個(gè)數(shù)據(jù)節(jié)點(diǎn)(即第3.5.2節(jié)介紹的流水線復(fù)制策略)。
(5)因?yàn)楦鱾€(gè)數(shù)據(jù)節(jié)點(diǎn)位于不同機(jī)器上,數(shù)據(jù)需要通過(guò)網(wǎng)絡(luò)發(fā)送,因此,為了*所有數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)都是*的,接收到數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)要向發(fā)送者發(fā)送“確認(rèn)包”(ACK Packet)。確認(rèn)包沿著數(shù)據(jù)流管道逆流而上,從數(shù)據(jù)流管道依次經(jīng)過(guò)各個(gè)數(shù)據(jù)節(jié)點(diǎn)并*終發(fā)往客戶端,當(dāng)客戶端收到應(yīng)答時(shí),它將對(duì)應(yīng)的分包從內(nèi)部隊(duì)列移除。不斷執(zhí)行(3)~(5)步,直到數(shù)據(jù)全部寫完。
(6)客戶端調(diào)用close()方法關(guān)閉輸出流,此時(shí)開(kāi)始,客戶端不會(huì)再向輸出流中寫入數(shù)據(jù),所以,當(dāng)DFSOutputStream對(duì)象內(nèi)部隊(duì)列中的分包都收到應(yīng)答以后,就可以使用ClientProtocol.complete()方法通知名稱節(jié)點(diǎn)關(guān)閉文件,完成一次正常的寫文件過(guò)程。
學(xué)習(xí)交流群(掃碼免費(fèi)加群)
- 1、新手入門
- 2、學(xué)習(xí)資料
- 3、免費(fèi)課程
- 4、考試動(dòng)態(tài)
- 5、備考干貨
- 6、答疑沖刺