亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HDFS寫入和讀取流程

系統 1982 0

一、HDFS

HDFS全稱是Hadoop Distributed System。HDFS是為以流的方式存取大文件而設計的。適用于幾百MB,GB以及TB,并寫一次讀多次的場合。而對于低延時數據訪問、大量小文件、同時寫和任意的文件修改,則并不是十分適合。

目前HDFS支持的使用接口除了Java的還有,Thrift、C、FUSE、WebDAV、HTTP等。HDFS是以block-sized chunk組織其文件內容的,默認的block大小為64MB,對于不足64MB的文件,其會占用一個block,但實際上不用占用實際硬盤上的64MB,這可以說是HDFS是在文件系統之上架設的一個中間層。之所以將默認的block大小設置為64MB這么大,是因為block-sized對于文件定位很有幫助,同時大文件更使傳輸的時間遠大于文件尋找的時間,這樣可以最大化地減少文件定位的時間在整個文件獲取總時間中的比例 。

二、HDFS的體系結構

構成HDFS主要是Namenode(master)和一系列的Datanode(workers)。Namenode是管理HDFS的目錄樹和相關的文件元數據,這些信息是以"namespace image"和"edit log"兩個文件形式存放在本地磁盤,但是這些文件是在HDFS每次重啟的時候重新構造出來的。Datanode則是存取文件實際內容的節點,Datanodes會定時地將block的列表匯報給Namenode。


由于Namenode是元數據存放的節點,如果Namenode掛了那么HDFS就沒法正常運行,因此一般使用將元數據持久存儲在本地或遠程的機器上,或者使用secondary namenode來定期同步Namenode的元數據信息,secondary namenode有點類似于MySQL的Master/Salves中的Slave,"edit log"就類似"bin log"。如果Namenode出現了故障,一般會將原Namenode中持久化的元數據拷貝到secondary namenode中,使secondary namenode作為新的Namenode運行起來。

??????????????????????????? HDFS寫入和讀取流程

三、讀寫流程

GFS論文提到的文件讀取簡單流程:


??????????????? HDFS寫入和讀取流程

?

詳細流程:

文件讀取的過程如下:

  1. 使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;
  2. Namenode會視情況返回文件的部分或者全部block列表,對于每個block,Namenode都會返回有該block拷貝的DataNode地址;
  3. 客戶端開發庫Client會選取離客戶端最接近的DataNode來讀取block;如果客戶端本身就是DataNode,那么將從本地直接獲取數據.
  4. 讀取完當前block的數據后,關閉與當前的DataNode連接,并為讀取下一個block尋找最佳的DataNode;
  5. 當讀完列表的block后,且文件讀取還沒有結束,客戶端開發庫會繼續向Namenode獲取下一批的block列表。
  6. 讀取完一個block都會進行checksum驗證,如果讀取datanode時出現錯誤,客戶端會通知Namenode,然后再從下一個擁有該block拷貝的datanode繼續讀。

GFS論文提到的寫入文件簡單流程:

????????????????????????????????????? HDFS寫入和讀取流程 ? ? ? ? ?? ?

詳細流程:

寫入文件的過程比讀取較為復雜:

  1. 使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;
  2. Namenode會檢查要創建的文件是否已經存在,創建者是否有權限進行操作,成功則會為文件 創建一個記錄 ,否則會讓客戶端拋出異常;
  3. 當客戶端開始寫入文件的時候,開發庫會將文件切分成多個packets,并在內部以數據隊列"data queue"的形式管理這些packets,并向Namenode申請新的blocks,獲取用來存儲replicas的合適的datanodes列表,列表的大小根據在Namenode中對replication的設置而定。
  4. 開始以pipeline(管道)的形式將packet寫入所有的replicas中。開發庫把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之后,再將其傳遞給在此pipeline中的下一個datanode,直到最后一個datanode,這種寫數據的方式呈流水線的形式。
  5. 最后一個datanode成功存儲之后會返回一個ack packet,在pipeline里傳遞至客戶端,在客戶端的開發庫內部維護著"ack queue",成功收到datanode返回的ack packet后會從"ack queue"移除相應的packet。
  6. 如果傳輸過程中,有某個datanode出現了故障,那么當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩余的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持replicas設定的數量。





HDFS寫入和讀取流程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人国内精品久久久久影院 | 好吊妞免费视频 | 97精品久久久久中文字幕 | 国产国语videosex另类 | 动漫美女撒尿 | 手机看黄av免费网址 | 性久久久久 | 成人性一级视频在线观看 | 欧美久色| 亚洲一区三区 | 女女女女女女bbbbbb级毛片 | 日本不卡高清视频 | 欧美z0o| 亚洲精品乱码蜜桃久久久 | 九九爱www高清免费人成 | 久久一本一区二区三区 | 97色精品视频在线观看免费 | 羞污影院| 国产激情久久久久久影院 | 国产综合久久久久久鬼色 | 国产成人综合久久亚洲精品 | 欧美在线视频免费 | 亚洲品质自拍视频 | 伊人久久久综在合线久久在播 | 国产精品福利社 | 精品推荐 国产 | 国产精品tv | 欧美日韩一区二区在线观看视频 | 亚洲精品一二三四 | 一道本不卡免费视频 | 色狠狠婷婷97 | 国产国产精品人在线视 | 四虎影视成人永久在线观看 | 野外一级毛片 | 亚洲欧美日韩中文在线 | 日韩孕交japanese孕交 | 久青草免费视频手机在线观看 | 国产精品久久久久天天影视 | 精品欧美高清一区二区免费 | 成年香蕉大黄美女美女 | 日韩成人影视 |