無(wú)代碼開發(fā)平臺(tái)(國(guó)內(nèi)無(wú)代碼開發(fā)平臺(tái)推薦)">國(guó)內(nèi)無(wú)代碼開發(fā)平臺(tái)(國(guó)內(nèi)無(wú)代碼開發(fā)平臺(tái)推薦)
824
2022-05-29
HDFS讀寫原理和代碼簡(jiǎn)單實(shí)現(xiàn)
關(guān)鍵詞:HDFS讀寫?? MRS? windows客戶端下讀寫
摘要:本文主要研究了hdfs文件系統(tǒng)的讀寫流程以及基于MRS在windows客戶端下讀寫hdfs文件的實(shí)現(xiàn)
1. HDFS的架構(gòu)和元數(shù)據(jù)
1.1 HDFS采用master/slaves主從結(jié)構(gòu)模型管理數(shù)據(jù),結(jié)構(gòu)模型圖如下
1.2 元數(shù)據(jù)的相關(guān)概念
Fsimage:文件系統(tǒng)映射文件,也是元數(shù)據(jù)的鏡像文件(磁盤中),存儲(chǔ)某段時(shí)間namenode內(nèi)存元數(shù)據(jù)信息
Edits log:操作日志文件
1.3 元數(shù)據(jù)的工作特點(diǎn)
(1) namenode始終在內(nèi)存中存儲(chǔ)元數(shù)據(jù),使得“讀操作”更加快
(2)寫請(qǐng)求時(shí),向edits文件寫入日志,成功返回后才修改內(nèi)存,并向客戶端返回
(3) NameNode內(nèi)存中存儲(chǔ)的是=fsimage+edits
2. 文件的讀寫流程
2.1 文件的讀取流程
1) 客戶端Client調(diào)用FileSystem的open(),返回FSDataInputStream對(duì)象給客戶端.DistributeFileSystem對(duì)象通過(guò)RPC和NameNode通信,查詢?cè)獢?shù)據(jù)信息,確定文件路徑是否存在以及檢查權(quán)限,返回這個(gè)文件的數(shù)據(jù)塊位置列表(同一數(shù)據(jù)塊位置在不同DataNode上存儲(chǔ),NameNode具有機(jī)架感知功能,會(huì)將DataNode的主機(jī)進(jìn)行排序)
2) 客戶通過(guò)FSDataInputStream read()方法讀取數(shù)據(jù).FSDataInputStream對(duì)象按照數(shù)據(jù)塊位置排序建立一條連接,讀取數(shù)據(jù).當(dāng)此數(shù)據(jù)塊讀取完畢后,FSDataInputStream對(duì)象關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后繼續(xù)按照優(yōu)先順序建立下一個(gè)數(shù)據(jù)塊連接,讀取數(shù)據(jù)…….在據(jù)讀取過(guò)程中,如果客戶端在與數(shù)據(jù)節(jié)點(diǎn)通信時(shí)出現(xiàn)錯(cuò)誤,則會(huì)嘗試讀取包含有此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn),并且失敗的數(shù)據(jù)節(jié)點(diǎn)會(huì)被記錄,以后不會(huì)再連接
3) 當(dāng)數(shù)據(jù)讀取完畢后,調(diào)用FSDataInputStream對(duì)象的close()函數(shù)。
2.2 文件的寫入流程
1)客戶端Client調(diào)用FileSystem的create()函數(shù),返回FSDataOutputStream對(duì)象給客戶端DistributedFileSystem對(duì)象通過(guò)RPC與namenode通信,確定文件存在不存在以及是否有創(chuàng)建文件的權(quán)限,先將操作寫入log,再載入內(nèi)存,將DataNode列表返回
2) 客戶端通過(guò)FSDataOutputStream對(duì)象,寫數(shù)據(jù).FSDataOutputStream對(duì)象將數(shù)據(jù)按照128M分成塊,寫入Data Queue.然后將DataNode列表和Data Queue通過(guò)DataNode列表一同發(fā)送給最近的DataNode.這樣之后client端和NameNode分配的多個(gè)DataNode構(gòu)成pipeline管道.client每次向第一個(gè)DataNode寫入一個(gè)packet,這個(gè)packet便會(huì)直接在pipeline里傳給第二個(gè)、第三個(gè)DataNode.每個(gè)DataNode寫完一個(gè)塊后,會(huì)返回確認(rèn)信息. FSDataoutputStream將確認(rèn)信息保存在ACK Queue.所有的數(shù)據(jù)塊寫入pipeline中的數(shù)據(jù)節(jié)點(diǎn),并且ACK Queue成功返回.
3) FSDataOutputStream對(duì)象close()方法關(guān)閉流.通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢
3. 基于華為云MRS windows下讀寫hdfs的實(shí)現(xiàn)
3.1 創(chuàng)建2.1.0非安全集群
3.2 安全組規(guī)則入方向放開windows 客戶端ip和所有端口
3.3 為集群的各個(gè)節(jié)點(diǎn)綁定彈性ip
3.4 將彈性ip和集群節(jié)點(diǎn)主機(jī)名寫入windows的hosts文件
3.5 打開https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-2.1,將樣例代碼下載下來(lái),然后是idea打開hdfs-examples項(xiàng)目
3.6 在huawei下面創(chuàng)建test文件夾,并且Test.java文件放到這個(gè)文件夾內(nèi)
3.7 從集群下載配置文件,置于項(xiàng)目conf文件夾下
3.8 將下面配置配置于hdfs-site.xml中
3.9 idea執(zhí)行程序,執(zhí)行結(jié)果如下
附件: Test.rar 1.06KB 下載次數(shù):2次
附件: 文檔.docx 455.30KB 下載次數(shù):4次
EI企業(yè)智能 Hadoop MapReduce服務(wù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。