日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hadoop實(shí)戰(zhàn)

 昵稱(chēng)15473813 2014-01-16
第二部分:HDFS文件讀取的解析
文件讀取流程
 
 
流程分析
使用HDFS提供的客戶(hù)端開(kāi)發(fā)庫(kù)Client,向遠(yuǎn)程的Namenode發(fā)起RPC請(qǐng)求;
 Namenode會(huì)視情況返回文件的部分或者全部block列表,對(duì)于每個(gè)block,Namenode都會(huì)返回有該block拷貝的DataNode地址;
客戶(hù)端開(kāi)發(fā)庫(kù)Client會(huì)選取離客戶(hù)端最接近的DataNode來(lái)讀取block;如果客戶(hù)端本身就是DataNode,那么將從本地直接獲取數(shù)據(jù).
讀取完當(dāng)前block的數(shù)據(jù)后,關(guān)閉與當(dāng)前的DataNode連接,并為讀取下一個(gè)block尋找最佳的DataNode;
當(dāng)讀完列表的block后,且文件讀取還沒(méi)有結(jié)束,客戶(hù)端開(kāi)發(fā)庫(kù)會(huì)繼續(xù)向Namenode獲取下一批的block列表。
讀取完一個(gè)block都會(huì)進(jìn)行checksum驗(yàn)證,如果讀取datanode時(shí)出現(xiàn)錯(cuò)誤,客戶(hù)端會(huì)通知Namenode,然后再?gòu)南乱粋€(gè)擁有該block拷貝的datanode繼續(xù)讀。
 
第三部分:HDFS文件寫(xiě)入的解析
文件寫(xiě)入流程
 
流程分析
使用HDFS提供的客戶(hù)端開(kāi)發(fā)庫(kù)Client,向遠(yuǎn)程的Namenode發(fā)起RPC請(qǐng)求;
Namenode會(huì)檢查要?jiǎng)?chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進(jìn)行操作,成功則會(huì)為文件 創(chuàng)建一個(gè)記錄,否則會(huì)讓客戶(hù)端拋出異常;
當(dāng)客戶(hù)端開(kāi)始寫(xiě)入文件的時(shí)候,會(huì)將文件切分成多個(gè)packets,并在內(nèi)部以數(shù)據(jù)隊(duì)列"data queue"的形式管理這些packets,并向Namenode申請(qǐng)新的blocks,獲取用來(lái)存儲(chǔ)replicas的合適的datanodes列表,列表的大小根據(jù)在Namenode中對(duì)replication的設(shè)置而定。
開(kāi)始以pipeline(管道)的形式將packet寫(xiě)入所有的replicas中。把packet以流的方式寫(xiě)入第一個(gè)datanode,該datanode把該packet存儲(chǔ)之后,再將其傳遞給在此pipeline中的下一個(gè)datanode,直到最后一個(gè)datanode,這種寫(xiě)數(shù)據(jù)的方式呈流水線(xiàn)的形式。
最后一個(gè)datanode成功存儲(chǔ)之后會(huì)返回一個(gè)ack packet,在pipeline里傳遞至客戶(hù)端,在客戶(hù)端的開(kāi)發(fā)庫(kù)內(nèi)部維護(hù)著"ack queue",成功收到datanode返回的ack packet后會(huì)從"ack queue"移除相應(yīng)的packet。
如果傳輸過(guò)程中,有某個(gè)datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會(huì)被關(guān)閉,出現(xiàn)故障的datanode會(huì)從當(dāng)前的pipeline中移除,剩余的block會(huì)繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時(shí)Namenode會(huì)分配一個(gè)新的datanode,保持replicas設(shè)定的數(shù)量。
 
流水線(xiàn)復(fù)制
               當(dāng)客戶(hù)端向 HDFS 文件寫(xiě)入數(shù)據(jù)的時(shí)候,一開(kāi)始是寫(xiě)到本地臨時(shí)文件中。假設(shè)該文件的副 本系數(shù)設(shè)置為 3 ,當(dāng)本地臨時(shí)文件累積到一個(gè)數(shù)據(jù)塊的大小時(shí),客戶(hù)端會(huì)從 Namenode 獲取一個(gè) Datanode 列表用于存放副本。然后客戶(hù)端開(kāi)始向第一個(gè) Datanode 傳輸數(shù)據(jù),第一個(gè) Datanode 一小部分一小部分 (4 KB) 地接收數(shù)據(jù),將每一部分寫(xiě)入本地倉(cāng)庫(kù),并同時(shí)傳輸該部分到列表中 第二個(gè) Datanode 節(jié)點(diǎn)。第二個(gè) Datanode 也是這樣,一小部分一小部分地接收數(shù)據(jù),寫(xiě)入本地 倉(cāng)庫(kù),并同時(shí)傳給第三個(gè) Datanode 。最后,第三個(gè) Datanode 接收數(shù)據(jù)并存儲(chǔ)在本地。因此, Datanode 能流水線(xiàn)式地從前一個(gè)節(jié)點(diǎn)接收數(shù)據(jù),并在同時(shí)轉(zhuǎn)發(fā)給下一個(gè)節(jié)點(diǎn),數(shù)據(jù)以流水線(xiàn)的 方式從前一個(gè) Datanode 復(fù)制到下一個(gè)
 
更細(xì)節(jié)的原理
           客戶(hù)端創(chuàng)建文件的請(qǐng)求其實(shí)并沒(méi)有立即發(fā)送給 Namenode ,事實(shí)上,在剛開(kāi)始階 HDFS 客戶(hù)端會(huì)先將文件數(shù)據(jù)緩存到本地的一個(gè)臨時(shí)文件。應(yīng)用程序的寫(xiě)操作被透 明地重定向到這個(gè)臨時(shí)文件。當(dāng)這個(gè)臨時(shí)文件累積的數(shù)據(jù)量超過(guò)一個(gè)數(shù)據(jù)塊的大小 ,客戶(hù)端才會(huì)聯(lián)系 Namenode Namenode 將文件名插入文件系統(tǒng)的層次結(jié)構(gòu)中,并 且分配一個(gè)數(shù)據(jù)塊給它。然后返回 Datanode 的標(biāo)識(shí)符和目標(biāo)數(shù)據(jù)塊給客戶(hù)端。接著 客戶(hù)端將這塊數(shù)據(jù)從本地臨時(shí)文件上傳到指定的 Datanode 上。當(dāng)文件關(guān)閉時(shí),在臨 時(shí)文件中剩余的沒(méi)有上傳的數(shù)據(jù)也會(huì)傳輸?shù)街付ǖ?/span> Datanode 上。然后客戶(hù)端告訴 Namenode 文件已經(jīng)關(guān)閉。此時(shí) Namenode 才將文件創(chuàng)建操作提交到日志里進(jìn)行存儲(chǔ) 。如果 Namenode 在文件關(guān)閉前宕機(jī)了,則該文件將丟失。
第四部分:副本機(jī)制
特點(diǎn)
1. 數(shù)據(jù)類(lèi)型單一
2. 副本數(shù)比較多
3. 寫(xiě)文件時(shí)副本的放置方法
4. 動(dòng)態(tài)的副本創(chuàng)建策略
5. 弱化的副本一致性要求
副本擺放策略
 
 
 
修改副本數(shù)
1.集群只有三個(gè)Datanode,hadoop系統(tǒng)replication=4時(shí),會(huì)出現(xiàn)什么情況?
        對(duì)于上傳文件到hdfs上時(shí),當(dāng)時(shí)hadoop的副本系數(shù)是幾,這個(gè)文件的塊數(shù)副本數(shù)就會(huì)有幾份,無(wú)論以后你怎么更改系統(tǒng)副本系統(tǒng),這個(gè)文件的副本數(shù)都不會(huì)改變,也就說(shuō)上傳到分布式系統(tǒng)上的文件副本數(shù)由當(dāng)時(shí)的系統(tǒng)副本數(shù)決定,不會(huì)受replication的更改而變化,除非用命令來(lái)更改文件的副本數(shù)。因?yàn)閐fs.replication實(shí)質(zhì)上是client參數(shù),在create文件時(shí)可以指定具體replication,屬性dfs.replication是不指定具體replication時(shí)的采用默認(rèn)備份數(shù)。文件上傳后,備份數(shù)已定,修改dfs.replication是不會(huì)影響以前的文件的,也不會(huì)影響后面指定備份數(shù)的文件。只影響后面采用默認(rèn)備份數(shù)的文件。但可以利用hadoop提供的命令后期改某文件的備份數(shù):hadoop fs -setrep -R 1。如果你是在hdfs-site.xml設(shè)置了dfs.replication,這并一定就得了,因?yàn)槟憧赡軟](méi)把conf文件夾加入到你的 project的classpath里,你的程序運(yùn)行時(shí)取的dfs.replication可能是hdfs-default.xml里的 dfs.replication,默認(rèn)是3??赡苓@個(gè)就是造成你為什么dfs.replication老是3的原因。你可以試試在創(chuàng)建文件時(shí),顯式設(shè)定replication。replication一般到3就可以了,大了意義也不大。
轉(zhuǎn)載請(qǐng)注明出處【  http:///forum/blogPost/list/5936.html#19653

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多