您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Hadoop文件讀取的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hadoop文件讀取的示例分析”這篇文章吧。
客戶端通過調用FileSystem對象的open()方法來打開希望讀取的文件,對于HDFS來說,這個對象是分布式系統(步驟1)的一個實例。DistributedFileSystem通過使用RPC來調用namenode,以確定文件起始塊的位置(步驟2),對于每一個塊,namenode返回存有該塊復本的datanode地址,此外,這些datanode(比如,在一個MapReduce任務中),并保存有相應數據庫的一個復本時,該節點將本地datanode中讀取數據。DistributedFileSystem累返回一個FSDataInputStream對象(一個支持文件定位的輸入流)給客戶端并讀取數據。FSDataInputStream類轉而封裝DFSInputStream對象,該對象管理著datanode和namenode的I/O,接著,客戶端對這個輸入流調用read()方法(步驟3)。存儲著文件起始塊的datanode地址的DFSInputStream隨機連接距離最近的datanode。通過對數據流反復調用read()方法,可以將數據從datanode傳輸到客戶端(步驟4).到達塊的末端時,DFSInputStream會關閉與該datanode的連接,然后需找下一個塊的最近datanode(步驟5)。客戶端只需要讀取連續的流,并且操作對于客戶端都是透明的。客戶端從流中讀取數據時,塊是按照打開DFSInputStream與datanode新建連接的順序讀取的,它也需要詢問namenode來檢索下一批所需快的datanode的位置,一旦客戶端完成讀取,就對FSDataInputStream調用close()方法(步驟6)。在讀取數據的時候,如果DFSInputStream在與datanode通信時遇到錯誤,它便會嘗試從這個快的另外一個最領近datanode讀取數據。它也會機主那個故障datanode,以保證以后不會反復讀取該節點上后續的塊。DFSInputStream也會通過校驗和確認從datanode發來的數據是否完整。如果發現一個損壞的塊,它就會在DFSInputStream視圖從其他datanode讀取一個塊的復本之前通知namenode。這個設計的一個重點是:namenode告知客戶端每個塊中最近的datanode,并讓客戶端直接聯系該datanode且檢索鎖具。由于數據流分散在該集群中的所有datanode,所以這種設計能使HDFS可擴展到大量的并發客戶端。同時,namenode僅需要相應塊位置的請求(這些信息存儲在內存中,因而非常高效),而無需相應數據請求,否則隨著客戶端數據的增長,namenode很快會變為一個瓶頸。
以上是“Hadoop文件讀取的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。