好程式設計師大資料培訓分享HDFS讀流程
好程式設計師大資料 培訓 分享HDFS 讀流程 1. 客戶端或者使用者透過呼叫 FileSystem 物件的 Open() 方法開啟需要讀取的檔案,這時就是 HDSF 分散式系統所獲取的一個物件
2.FileSystem 透過遠端協議呼叫 NameNode 確定檔案的前幾個 Block 的位置,對於每一個 block,NameNode 返回一個含有 Block 的後設資料資訊,接下來 DataNode 按照上面定義的距離 (offSet 偏移量 ) 進行排序 , 如果 Client 本身即是一個 DataNode, 那麼就會優先從本地 DataNode 節點讀取資料 . HDFS 完成上面的工作之後返回一個 FSDatalnputStream 給客戶端 , 讓其從 FSDatalnputStream 中讀取。 FSDatalnputStream 包裝了一個類 DFSInputStream, 用來管理 DataNode 和 NameNode 的 I/O 操作。
3.NameNode 向客戶端返回一個包含了資料資訊的地址 , 客戶端根據地址建立一個 FSDDatalnputStream 的物件開始進行資料的讀取
4.FSDatalnputStream 根據開始存的前幾個 Block 的 DataNode 地址,連線到最近 DataNode 上對資料開始從頭讀取,客戶端會反覆呼叫 read() 方法,以流的形式讀取 DataNode 這中的資料
5. 當讀取到 Block 的結尾的時候, FSDatalnputStream 會關閉當前 DataNode 的連線然後查詢能否讀取下一個 Block 的 DataNode 位置資訊 , 此時給客戶端產生的感覺就是資料是連續讀取的,也就說在讀取的時候開始查詢下一個塊所在的地址。讀取完成時需要使用 close() 方法關閉 FSDatalnputStream
HDFS 寫流程:
1.Client 透過呼叫 FileSystem 類的 Create() 方法請求建立檔案
2.FileSystem 透過對 NameNode 發出遠端請求 , 在 NameNode 裡面建立一個新的檔案 , 但是此時並不關聯任何塊 ,NameNode 進行很多檢查來保證不存在要建立檔案已經在系統中 , 同時檢查是否有相當許可權來建立檔案,如果這些都檢查完了 , 那麼 NamdNode 會記錄下這個新檔案的資訊。 FileSystem 返回一個 FSDatalnputStream 給客戶端用來寫入資料, FSDatalnputStream 將包裝一個 DFsOutputStream 用於對 DataNode 和 NameNode 的通訊 , 一旦檔案建立失敗 , 會給客戶端返回一個 l0Exception 表示檔案建立失敗並停止任務
3. 客戶端開始寫資料 FSDatalnputStream 把要寫的資料分成包的形式將其寫入到中間佇列中,其中的資料有 DataStramer 來讀取 ,DataStreamer 的職責就是讓 NameNode 分配一個新的塊透過查詢對應 DataNode 來存資料 , 來儲存的資料會被備份出一個副本 , 儲存到其他節點完成資料寫入即可
4.FSDatalnputStream 維護了一個內部關於 packets 的佇列 , 裡面存放著等待被 DataNode 確認的資訊 , 一旦資料資訊寫入 DataNode 成功後 , 就會從佇列中移除
5. 當資料完成寫入之後客戶會呼叫 close 方法 , 透過 NameNode 完成寫入之前透過一個方法 flush 將殘留資料一起寫進去。和 NameNode 確定寫入的位置資訊,並返回成功狀態。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2698450/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料培訓分享大資料的應用程式設計師大資料
- 好程式設計師大資料培訓分享大資料還學嗎?程式設計師大資料
- 好程式設計師大資料培訓分享mysql資料型別程式設計師大資料MySql資料型別
- 好程式設計師大資料培訓分享:Hadoop叢集同步程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 好程式設計師大資料培訓分享大資料兩大核心技術程式設計師大資料
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師大資料培訓分享大資料就業方向有哪些?程式設計師大資料就業
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典四程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典六程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師大資料培訓分享Spark技術總結程式設計師大資料Spark
- 好程式設計師大資料培訓分享Hadoop的shuffle過程程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop分散式叢集程式設計師大資料Hadoop分散式
- 好程式設計師大資料培訓分享MySQL8.0新特性程式設計師大資料MySql
- 好程式設計師大資料培訓分享Hadoop入門進階程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop怎樣處理資料?程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享之Ambari和ClouderaManager對比程式設計師大資料Cloud
- 好程式設計師大資料培訓分享之hive儲存過程程式設計師大資料Hive儲存過程
- 好程式設計師大資料培訓分享HBase Filter過濾器概述程式設計師大資料Filter過濾器
- 好程式設計師大資料培訓分享如何區分Hive與HBase程式設計師大資料Hive
- 好程式設計師大資料培訓分享Hadoop技術優缺點程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師大資料培訓分享settings和mapping的意義程式設計師大資料APP
- 好程式設計師大資料教程分享:HDFS基本概念程式設計師大資料
- 好程式設計師大資料培訓分享之MySQL資料庫SQL簡介程式設計師大資料MySql資料庫
- 好程式設計師大資料培訓分享之《MySQL資料庫》常用函式整理程式設計師大資料MySql資料庫函式
- 好程式設計師大資料培訓分享MySQL資料庫儲存引擎簡介程式設計師大資料MySql資料庫儲存引擎
- 好程式設計師大資料培訓分享之hive常用內部函式程式設計師大資料Hive函式
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 好程式設計師大資料培訓分享怎樣進行大資料入門學習程式設計師大資料
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML