石家莊網(wǎng)絡(luò)公司行業(yè)深圳百度seo怎么做
1、HDFS寫數(shù)據(jù)(宏觀):
1、首先,客戶端發(fā)送一個(gè)寫數(shù)據(jù)的請(qǐng)求,通過rpc與NN建立連接,NN會(huì)做一些簡(jiǎn)單的校驗(yàn),文件是否存在,是否有空間存儲(chǔ)數(shù)據(jù)等。
2、NN就會(huì)將校驗(yàn)的結(jié)果發(fā)送給客戶端,客戶端就會(huì)向NN發(fā)送請(qǐng)求,第一個(gè)block存儲(chǔ)在哪個(gè)DN中。
3、NN接受客戶端請(qǐng)求,就會(huì)根據(jù)block塊以及副本的數(shù)量來分配DN,并將對(duì)應(yīng)的DN的地址返回給客戶端。
4、客戶端會(huì)向第一個(gè)DN發(fā)送請(qǐng)求,上傳數(shù)據(jù),第一個(gè)DN接受到以后就會(huì)向下一個(gè)DN發(fā)送請(qǐng)求,直到最后一個(gè)DN,將整個(gè)pipline管道創(chuàng)建成功,在返回給客戶端。
5、此時(shí)客戶端會(huì)將block切分成多個(gè)package,以package的形式傳遞到DN中,在pipiline中依次傳輸,當(dāng)傳輸?shù)阶詈笠粋€(gè)DN的時(shí)候,就會(huì)返回一個(gè)ack響應(yīng),當(dāng)客戶端接收到最后一個(gè)DN傳輸過來的ack,此時(shí)package就傳輸完成,然后一次傳輸package。
6、當(dāng)?shù)谝粋€(gè)block傳輸完成以后,客戶端就會(huì)請(qǐng)求NN上傳第二個(gè)block。
7、當(dāng)所有的package傳輸完成后,管道就會(huì)關(guān)閉,數(shù)據(jù)傳輸成功。
2、HDFS寫數(shù)據(jù)請(qǐng)求(微觀:保證了在傳輸?shù)倪^程中package不會(huì)發(fā)生錯(cuò)誤):
1、首先,客戶端發(fā)送寫數(shù)據(jù)的請(qǐng)求,將磁盤中的數(shù)據(jù)從內(nèi)存中提取出來,存放在客戶端的內(nèi)存中。
2、當(dāng)客戶端與NN之間通過rpc建立聯(lián)系后,獲取到第一個(gè)block存在的DN的地址,然后向第一個(gè)DN中發(fā)送寫數(shù)據(jù)的請(qǐng)求,第一個(gè)DN接收到后調(diào)用下一個(gè)DN,以此類推,在所有的DN之間建立pipline管道。
3、當(dāng)pipline管道建立后,客戶端此時(shí)對(duì)每一個(gè)block在進(jìn)行切分,分成多個(gè)package。
4、在客戶端,為了防止在傳輸過程package不會(huì)出錯(cuò),就會(huì)產(chǎn)生了兩個(gè)兩個(gè)隊(duì)列,分別是數(shù)據(jù)隊(duì)列(dataqueue)和確認(rèn)隊(duì)列(Ackqueue)。
5、此時(shí)會(huì)將緩存中的package讀取到數(shù)據(jù)隊(duì)列,同時(shí)也會(huì)復(fù)制一份到確認(rèn)隊(duì)列中?
6、然后數(shù)據(jù)隊(duì)列就會(huì)上傳數(shù)據(jù),然后通過Pipline管道分別就是package依次發(fā)送到對(duì)應(yīng)的dn中
7、當(dāng)客戶端發(fā)送第一個(gè)package的時(shí)候,會(huì)有一個(gè)進(jìn)程responseprosessor進(jìn)程用來接收DN傳來的ack的響應(yīng),如果接受到的ack是true,說明這個(gè)package傳輸成功,此時(shí)ackqueue中的package就會(huì)刪除,反之a(chǎn)ckqueue會(huì)將package復(fù)制一份給dataqueue重新發(fā)送,一直到收到的ack的狀態(tài)時(shí)true。
3、HDFS的讀數(shù)據(jù)請(qǐng)求:
1、客戶端通過rpc與NN建立連接,發(fā)送讀數(shù)據(jù)的請(qǐng)求
2、NN根據(jù)客戶端的請(qǐng)求,NN將block以及對(duì)應(yīng)副本所對(duì)應(yīng)的DN的地址返回返回個(gè)客戶端。
3、客戶端會(huì)根據(jù)返回來的DN地址,會(huì)根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)計(jì)算出與客戶端的距離,然后進(jìn)行排序。
4、客戶端會(huì)選擇距離較近的DN中去讀取block,如果客戶端就在DN中,就會(huì)在自生讀取block,當(dāng)block讀取完成后,文件讀取還沒有結(jié)束,此時(shí)客戶段會(huì)向NN繼續(xù)發(fā)送讀數(shù)據(jù)的請(qǐng)求,獲取下一批的block的地址。
5、最終客戶端會(huì)將這些讀取的block合并成一個(gè)文件。
4、package的結(jié)構(gòu):
1、package主要分成兩個(gè)部分:package? header 和package? data
一般的大小是64kb
haeder中存放的是:offset in block (在block中的偏移量),last packet in block (是不是block中的最后一個(gè)packet)
packdata中存放的是:chunk data (存儲(chǔ)的數(shù)據(jù)),chunk checksum(校驗(yàn)文件,與chunkdata是一一對(duì)應(yīng)的)