hadoop文件写入
轉(zhuǎn):http://blog.csdn.net/xiaoshunzi111/article/details/48198105
?
由上圖可知;寫入文件分為三個角色,分別是clientnode? namenode? 和datanode
cliennode本質(zhì)為java虛擬機(jī).namenode 和datanode則是Hadoop數(shù)據(jù)集群存儲塊
第一步:create實(shí)際是客戶端創(chuàng)建DistributedFileSystem實(shí)例化對象
第二步 create通過實(shí)例化對象錄取調(diào)用對象中create()方法,此方法訪問namenode,namenode收到命令,首先判斷datanode中所寫的文件是否有重復(fù),然后在檢查namenode是否有可寫入空余的空間.當(dāng)二者同時滿足是,namenode寫將datanode路徑信息,文件數(shù)等記錄,并確認(rèn)信息返回DistributedFileSystem,否則返回異常,DistributedFileSystem收到確認(rèn)信息后向客戶端返回一個FSDataOutputStream FSDataOutputStream對象
第三步:實(shí)例化FSDataOutputStream對象(該對象負(fù)責(zé)處理 datanode 和 namenode 之間的通信 ),調(diào)用該對象的write()方法,? 即是圖中write實(shí)現(xiàn)過程該對象負(fù)責(zé)處理 datanode 和 namenode 之間的通信
第四步:方法將數(shù)據(jù)分成多個數(shù)據(jù)包,并寫入內(nèi)部隊列. DFDataOutStream 將寫入的數(shù)據(jù)分成多個數(shù)據(jù)包,并寫入內(nèi)部隊列中,同時開啟datanode中DataStreamer處理數(shù)據(jù)隊列,它負(fù)責(zé)根據(jù)datanode列來要求namenode分配合適的新塊存儲數(shù)據(jù)備份開啟管道機(jī)制依次執(zhí)行步驟4,同時即是write packet完整過程
第五步:每執(zhí)行一次4就有一次步驟5返回確認(rèn)信息.
4和5屬于分別在DataQueue隊列和ACKQueue隊列,當(dāng)每執(zhí)行一次4就將此步確認(rèn)信息放到ACKQueue隊列中
?
如圖:
?
第六步:當(dāng)FSDataOutputStream收到確認(rèn)信息后,執(zhí)行close()方法關(guān)閉輸出流,
第七步:DistributeFileStream 返回給namenode確認(rèn)信息.
注釋:第4-5部分實(shí)現(xiàn)在后臺完成步不一定在第七步之前,
當(dāng)執(zhí)行第四步就就收第5步確認(rèn)信息,告訴namenode 數(shù)據(jù)寫入成功,即是第七步.
轉(zhuǎn)載于:https://www.cnblogs.com/guxiaobei/p/8442131.html
總結(jié)
以上是生活随笔為你收集整理的hadoop文件写入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 函数定义
- 下一篇: 北京君正集成电路的Newton平台--穿