hdfs工作原理如下:
1、客戶端通過調(diào)用FileSystem對象的open括號來讀取希望打開的文件。對于HDFS來說,這個對象是分布式文件系統(tǒng)的一個實例。
2、DistributedFileSystem通過RPC來調(diào)用namenode,以確定文件的開頭部分的塊位置。對于每一塊,namenode返回具有該塊副本的datanode地址。此外,這些datanode根據(jù)他們與client的距離來排序(根據(jù)網(wǎng)絡(luò)集群的拓?fù)洌?。如果該client本身就是一個datanode,便從本地datanode中讀取。DistributedFileSystem返回一個FSDataInputStream對象給client讀取數(shù)據(jù),F(xiàn)SDataInputStream轉(zhuǎn)而包裝了一個DFSInputStream對象。
3、接著client對這個輸入流調(diào)用read()。存儲著文件開頭部分的塊的數(shù)據(jù)節(jié)點的地址DFSInputStream隨即與這些塊最近的datanode相連接。
4、通過在數(shù)據(jù)流中反復(fù)調(diào)用read(),數(shù)據(jù)會從datanode返回client。
5、到達(dá)塊的末端時,DFSInputStream會關(guān)閉與datanode間的聯(lián)系,然后為下一個塊找到最佳的datanode。client端只需要讀取一個連續(xù)的流,這些對于client來說都是透明的。
6、在讀取的時候,如果client與datanode通信時遇到一個錯誤,那么它就會去嘗試對這個塊來說下一個最近的塊。它也會記住那個故障節(jié)點的datanode,以保證不會再對之后的塊進(jìn)行徒勞無益的嘗試。 client也會確認(rèn)datanode發(fā)來的數(shù)據(jù)的校驗和。如果發(fā)現(xiàn)一個損壞的塊,它就會在client試圖從別的datanode中讀取一個塊的副本之前報告給namenode。
7、這個設(shè)計的一個重點是,client直接聯(lián)系datanode去檢索數(shù)據(jù),并被namenode指引到塊中最好的datanode。因為數(shù)據(jù)流在此集群中是在所有datanode分散進(jìn)行的。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com