這篇文章主要介紹了HDFS讀寫的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、HDFS讀寫之前提
NameNode(元數據節點):存放元數據(名稱空間、副本數、權限、塊列表、集群配置信息),不包含數據節點。元數據節點將文件系統元數據存儲在內存中。
1.DataNode(數據節點):真正存儲數據的地方,以數據塊為單位。默認數據塊大小為128M。數據節點周期性的將所有存儲塊信息發送給元數據節點??蛻舳送ㄟ^和NameNode節點溝通后,再向數據節點對數據讀出或寫入。
2.SecondaryNameNode(從元數據節點):并不是元數據節點的備用節點,而是配合元數據節點工作,與元數據節點有不同的工作。SecondaryNameNode周期性地將元數據節點的命名空間鏡像文件和修改日志合并,幫助元數據節點將內存中元數據信息存儲到磁盤上。
3.Client(客戶端):客戶端就是需要獲取HDFS系統中文件的應用程序和接口,引發HDFS的讀/寫等操作。
值得注意的是:
1.namenode實際客戶端只上傳一個datanode,其余兩個是namenode完成的。讓datenote自己復制的。然后復制完成以后逐級返回結果給namenode。如果2,3datanode復制失敗,再有namenode分配新的datanode地址。對于客戶端來說默認上傳一個datanode就可以了,其余的由datanode自己復制。
2.datanode切片是由客戶端完成的。datanode第二三個副本的上傳和第一個上傳是異步的。
二、HDFS中的寫流程:
1.根namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在。
2.namenode返回是否可以上傳。
3.client請求第一個 block該傳輸到哪些datanode服務器上。
4.namenode返回3個datanode服務器ABC。
5.client請求3臺dn中的一臺A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然后B調用C,將真個pipeline建立完成,逐級返回客戶端。
6.client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答。
7.當一個block傳輸完成之后,client再次請求namenode上傳第二個block的服務器。
三、hdfs中的讀流程:
1.跟namenode通信查詢元數據,找到文件塊所在的datanode服務器。
2.挑選一臺datanode(就近原則,然后隨機)服務器,請求建立socket流。
3.datanode開始發送數據。(從磁盤里面讀取數據放入流,以packet為單位來做校驗)
4.客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“HDFS讀寫的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。