Hadoop之HDFS
目錄
一、簡述Hadoop的生態系統
- Hadoop的核心是HDFS(分佈式存儲系統)+MapReduce(分佈式計算框架)
- Flume(日誌收集,常用於推薦系統的數據收集)
- Sqoop(數據轉移,用於兩個數據庫的數據轉移傳遞)
- Storm(數據分析,即時計算,不同於hadoop的批量計算)
- Ambari(簡化Hadoop複雜操作的工具)
- Mapreduce(解決數據計算問題,比較笨重,過時啦)
- YARN(資源管理調度系統,出現在Hadoop2.x)
- Hive("Hadoop的sql",將sql語言翻譯成MapReduce程序)
- Zookeeper(數據管理,約等於文件系統+通知機制)
- Spark(數據清洗,簡化Mapreduce的上手難度)
- HDFS(解決數據存儲問題)
- Hbase(數倉建模,解決數據查詢問題)
二、分佈式文件系統
- 集羣:多個人在一起作同樣的事 。
- 分佈式 :多個人在一起作不同的事 。
- 分佈式結構如下。
- 簡而言之,分佈式系統就是由多臺機器組成的大的機器集羣系統。而分佈式文件系統就是將一個大文件分成多個小文件並存儲,負責管理文件的系統。
- 分佈式文件系統在物理結構上是由計算機集羣中的多個節點構成的,這些節點分爲兩類,一類叫“主節點”(Master Node)或者也被稱爲“名稱結點”(NameNode),另一類叫“從節點”(Slave Node)或者也被稱爲“數據節點”(DataNode),正如字面意思一樣,主機負責與外界打交道,從機被主機管理。
三、HDFS
- Hadoop的分佈式文件系統。
(一)HDFS優點和缺點
- 大存儲(分佈式)
- 比傳統機器讀寫快(併發讀寫,不受單臺機器的吞吐量和容量限制)
- 成本低,支持廉價硬件
- 容錯率高(因爲支持備份)
- 移動計算(把計算任務下發到數據所在的節點進行處理)
- 不適合小文件存儲。(生成的記錄信息浪費空間)。
- 適合用於處理批量數據,而不適合於隨機定位訪問(量大難查)。
- 不適合多次修改(滿足一致性原則)
(二)HDFS的部分專業術語
數據塊(Block)
- 當我們遇到一個大的數據時,HDFS會將它拆分成許多個小的數據塊(Block),以便分佈式存儲。
元數據(MateData)
- 記錄了這些數據塊分別在哪個數據節點存儲,順序按照距離遠近排序,越近越前。
- 描述數據的數據,這種信息一般稱爲“元數據”。
(三)HDFS的部分核心組件
名稱節點(簡稱NN,NameNode)
- 也稱主節點,作爲中心服務器,主要負責接受客戶端的讀寫請求。在主節點的統一調度下進行數據塊的創建、刪除和複製等操作,主節點的元數據信息會在啓動後加載到內存裏,以便快速查詢。
- 管理數據節點。
- 控制客戶端的訪問權限。
- 需要維護塊信息表和數據節點信息表。
- NameNode有兩個重要文件,如下。
- fsimage:元數據鏡像文件,保存文件系統的目錄樹。
- edits:元數據操作日誌(針對目錄樹的修改操作),被寫入共享存儲系統中。
第二名稱節點(簡稱SNN,Secondary NameNode)
- 並不是主節點的備份文件,但是是備用主節點。
- 它主要爲了幫助主節點分擔壓力,類似主節點的“助手”。它的主要工作是在主節點忙時,幫助主節點合併edits ,減少NN啓動時間,合併流程如下圖。
數據節點(簡稱DN,DataNode)
- 主要爲了存儲數據塊。
- 必須向主節點彙報心跳、塊列表和其他確認信息ack。
(四)HDFS的工作流程
1、如何分塊
- 當我們遇到一個大的數據時,HDFS會將它拆分成許多個小的數據塊(Block),以便分佈式存儲。
- 數據塊容量太小不合適,尋址困難。
- 數據塊容量太大也不合適,容易產生外部碎片。
- 在Hadoop2.x,這個塊的大小默認是128MB,Hadoop1.x版本,默認大小是64MB。若文件大小不到128MB,則單獨存成一個塊。
2、如何備份
- 分好塊後,爲了保證容錯性(軟硬件出錯導致的數據丟失之類),HDFS需要對數據塊進行備份。Hadoop默認一個數據塊備份3個副本,分佈策略如下。
- 第一個副本:隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
- 第二個副本:放置在於第一個副本不同的機架的節點上。
- 第三個副本:與第二個副本相同機架的節點。
- 更多副本:隨機節點
- 存儲過程正如下圖一般。 (右上角的是元數據表)
3、檢測數據(塊)損壞流程
- 數據節點會週期性向主節點彙報自己的塊列表信息。
- 彙報信息前,數據節點會通過驗證校驗碼去篩選是否存在數據塊的數據損失,如果發現數據塊數據有所損失,則不上報。
- 主節點通過對比自己的塊列表和數據節點上報的信息,知道數據塊的損壞情況,並更新自己的塊表。
4、檢測數據節點(DN)損壞流程
- 數據節點通過向主節點發送心跳保持與其聯繫(3秒一次)。
- 如果主節點10分鐘沒有收到數據節點的心跳,則認爲其已經意外丟失,主節點會開始複製他在其他數據節點上的備份數據塊,重新備份。
5、寫文件流程
- 數據通常以64kb被寫入(被稱爲數據包),所有數據包在被節點接受寫入後,都會返回一個確認信息給客戶端,如果客戶端沒收到確認信息,它就會重新調整管道。
6、讀文件流程
- 如果出現了因爲數據錯誤導致的讀錯誤,那麼客戶端會去列表中的其他備份節點讀數據。
四、參考與推薦
- 用漫畫形式解說HDFS的存儲原理
- 詳解HDFS
- 《Google file system》(暫未看),用於處理存儲的分佈式文件系統(GFS)
- 《Google MapReduce》(暫未看),用於計算的分佈式計算框架(MAPREDUCE)