文章包括如下內容:分佈式
1. Hadoop2簡介與Hadoop1區別oop
2. Hadoop2主要改進spa
3. HDFS概述blog
4. HDFS主要特性隊列
5. HDFS不適合的場景hadoop
6. HDFS體系結構部署
7. HDFS構成io
8. 數據塊集羣
9. 數據塊的好處cli
10. HDFS讀寫流程
---------------------------------------------------------------------------------
1. Hadoop2簡介與Hadoop1區別
2. Hadoop2主要改進
增長了4部份內容:YARN、NameNode HA、HDFS federation、Hadoop RPC序列化擴展性
3. HDFS概述
HDFS是一個分佈式文件系統,具備高容錯的特色。它能夠部署在廉價的通用硬件上,提供高吞吐率的數據訪問,適合那些須要處理海量數據集的應用程序。
4. HDFS主要特性
支持超大文件;
檢測和快速應對硬件故障;
流式數據訪問;
簡化一致性模型。
5. HDFS不適合的場景
低延遲數據訪問;
大量的小文件;
多用戶寫入文件,修改文件。
6. HDFS體系結構
7. HDFS構成
NameNode上保存着HDFS的名字空間,DataNode將HDFS數據以文件的形式存儲在本地的文件系統中,它並不知道有關HDFS文件的信息,它把每一個HDFS數據塊存儲在本地文件系統的一個單獨的文件中。
8. 數據塊
HDFS也有塊的概念,hadoop2中HDFS塊默認大小128MB,hadoop1中HDFS塊默認大小64MB,以Linux普通文件的形式保存在數據節點的文件系統中。數據塊是HDFS的文件存儲處理的單元。
9. 數據塊的好處
HDFS能夠保存比存儲節點單一磁盤大的文件;
簡化了存儲子系統,簡化了存儲管理,也消除了分佈式管理文件元數據的複雜性;
方便容錯,有利於數據複製。
10. HDFS讀寫流程
讀流程
首先,HDFS提供的客戶端(HDFS client)向遠程的NameNode發起RPC請求,而後NameNode會視狀況訪問文件部分或所有塊的位置(block location)。對於每一個block,NameNode都會返回有該block拷貝的DataNode地址,而後返回生成FSData InputStream,HDFS client再根據這個流進行數據的一個流的讀操做。客戶端會選取離其最近的DataNode來讀取block,若是客戶端自己就是DataNode,將從本地直接獲取數據,讀取完當前block數據後,關閉當前DataNode鏈接,併爲讀取下一個block尋找最佳的DataNode。當讀完列表的block後,其文件讀取尚未結束,客戶端會繼續向NameNode獲取下一批的block列表,當讀取完一個block,會進行校驗,若是讀取的DataNode出現錯誤,會從新訪問NameNode,而後從下一個擁有該block拷貝DataNode讀取。
寫流程
HDFS客戶端向遠程的NameNode發起RPC請求,NameNode會檢查要建立的文件是否是存在,建立者是否有權限操做,成功,會爲文件建立一個記錄,不然,會讓客戶端拋出異常。當客戶端開始寫入文件的時候,文件會被分爲多個package,會放入隊列,這時候,FSDataOutputStream會向NameNode申請block,分清你要寫到哪些block裏,申請完之後,會支持一個寫的操做。由於HDFS有冗餘機制,固然這個冗餘機制能夠根據具體狀況設定,默認是3份。假設集羣冗餘是3份,它會首先寫入第一個DataNode,而後再寫第二個DataNode,再寫入第三個DataNode。若是寫入成功,則按原路徑返回給客戶端。若是中間某個DataNode出現了問題,這時候就會有一個最小不等數,若是咱們最小不等數設爲1,那麼我寫3個節點的數據只寫成功2個,那返回之後仍是會寫入HDFS,不過在後面會進行一個副本恢復,這就是一個寫的流程。
建立子路徑流程
向HDFS增長新的路徑,只會和NameNode交互,在NameNode上追加新開闢的記錄,這就是HDFS建立路徑的流程,它不會和DataNode交互。
刪除數據流程
刪除數據時,客戶端會和NameNode交互,它會有RPC告訴哪些數據要刪除,並在NameNode上作標記,等到DataNode對NameNode返回信號的時候,NameNode會指定DataNode刪除相應的block。