HDFS學習

    HDFS是Hadoop的分佈式文件系統,全稱爲Hadoop DistributedFilesystem,是Hadoop的核心內容。HDFS的設計思想來自於Google的GFS,是GFS其開源實現。 網絡

    學習HDFS先要知道其設計的目地。HDFS的設計目標是以流式數據訪問來存儲超大文件,系統運在商用硬件集羣上,總的來講,其設計主要有如下幾方面的考慮:(1)存儲超大文件,存儲的文件爲TB,甚至PB級。(2)流式數據讀取,一次寫入屢次讀取,是最高效的訪問模式。系統主要考慮的是大規模流式讀取的效率,HDFS只容許對一個一打開的文件順序寫入,還能夠在現有文件的末尾追加數據,他不支持在文件末尾覺得的其餘位置追加數據。因此已經可以寫入的文件就不能再修改,只能刪除後從新寫入。(3)商用硬件,hadoop設計運行在普通的廉價的商用PC上,組件失效被認爲是常態時事件,因此係統必須集成持續的監控、錯誤偵測、災難冗餘及自動回覆機制。(4)數據訪問的延遲高,由於HDFS是設計用於大吞吐量數據的,這是以必定的延時爲代價的,HDFS是單Master的,全部的文件請求都要通過它,請求較多時延遲增大。(5)文件數受限,NameNode將文件系統的元數據存儲在內存中,所以文件系統所能存儲的文件總數受限於NameNode的內存容量。還有一個問題就是,由於Map task的數量是由splits來決定的,因此用MR處理大量的小文件時,就會產生過多的Maptask,線程管理開銷將會增長做業時間。舉個例子,處理10000M的文件,若每一個split1M,那就會有10000Maptasks,會有很大的線程開銷;若每一個split100M,則只有100Maptasks,每一個Maptask將會有更多的事情作,而線程的管理開銷也將減少不少。(6)不支持多用戶寫入,也不支持任意修改文件。 分佈式

    下面介紹HDFS的幾個概念: oop

    (1)數據塊:HDFS的塊大小默認爲64MB。設置這麼的數據塊,能夠最小化尋址開銷。 學習

    (2)NameNode:管理文件系統的命名空間,它維護着文件系統樹及整棵樹內全部的文件和目錄,這些信息以兩個文件形式永久保存在本地磁盤上,命名空間鏡像文件和編輯日誌文件。NameNode還記錄着每一個文件中各個塊所在的數據節點信息,可是它不保存塊的永久位置信息,這些信息會在系統啓動時由數據節點重建。 spa

    (3)DateNode:文件系統的工做點。根據須要存儲或是檢索數據塊。 線程

    單一的NameNode簡化了系統的設計,可是這也是系統的瓶頸,沒NameNode,系統將沒法進行使用,所以對於NameNode的容錯很是重要。Hadoop爲NameNode容錯提供了兩種機制,一是備份那些組成文件系統元數據持久狀態的文件,將持久狀態寫入磁盤的同時寫入一個遠程掛載的網絡文件系統。二是運行一個輔助NameNode。要減小對於NameNode的讀寫等操做,防止NameNode成爲系統的瓶頸。
設計

    HDFS的數據流,客戶端與HDFS的數據交互過程: 日誌

    客戶端讀取HDFS中的數據過程: 事件

    

    客戶端寫入數據的過程:
內存

    

    詳細過程這裏再也不多作敘述了。有興趣的能夠本身查閱資料,《Hadoop權威指南》一書有詳細描述。

相關文章
相關標籤/搜索