HDFS文件讀取和寫入



讀取文件:
一:讀取方式一


寫入哪個DataNode是不確定的,主要尋找讀取速度較快的DataNode;
怎麼找到這種DataNode,從以下幾個方面:是否有本機位置,本機架位置,本機房位置;
依次重試讀取文件,直到讀取文件成功;
二:讀取方式二:backUpRead

每次讀取時,client會並行試着讀取兩個或三個DataNode,接受讀取成功信息後,會通知其他魏都區的DataNode結束讀取。

寫入數據:
一:鏈式寫入:


連式出現錯誤:假如DataNode2出現網絡問題。
解決方法:(1)直接跳過DataNode2的寫入,也就是寫入兩臺機器,比默認數量少一,帶來了數據安全的問題;
(2)seal and New方式:DataNode1向2寫入時,發現故障,會通過client向NameNode回執錯誤信息;然後從新分配寫入的DataNode,假設選中了DataNode4,然後向1,3,4練市寫入數據。
二:主從模式:


客戶端或者系統出現故障時,可能會引起數據的丟失。這就需要一直模式保障數據的完整性。
方法一例如:
Path p = new Path("p");
OutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
out.sync();
out.flush():
當寫入的數據超過一個塊後,對新的數據塊就可以進行讀操作。但正在寫入的數據塊對外不可見,也就是不能進行讀操作。
out.sync():對於已經寫入的數據可讀。無論數據塊有沒有被寫滿。
但這兩個方法會對數據的吞吐量有所影響,所以用時要在魯棒性和吞吐量做出權衡。


具體的讀寫步驟詳細說明可以參考hadoop權威指南。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章