好程式設計師大資料教程分享:HDFS基本概念

好程式設計師IT發表於2019-07-09
   1.1 HDFS 的介紹

   源自於 Google的GFS論文 發表於2003年10月 HDFS是GFS克隆版 ,HDFS的全稱是Hadoop Distributed File System易於擴充套件的分散式檔案系統,執行在大量普通廉價機器上,提供容錯機制,為大量使用者提供效能不錯的檔案存取服務

   整個 Hadoop的體系結構主要是透過HDFS來實現對分散式儲存的底層支援,並透過MR來實現對分散式並行任務處理的程式支援。

  HDFS採用主從(Master/Slave)結構模型,一個HDFS叢集是由一個NameNode和若干個DataNode組成的(在最新的Hadoop2.2版本已經實現多個NameNode的配置-這也是一些大公司透過修改hadoop原始碼實現的功能,在最新的版本中就已經實現了)。NameNode作為主伺服器,管理檔案系統名稱空間和客戶端對檔案的訪問操作。DataNode管理儲存的資料。HDFS支援檔案形式的資料。

   從內部來看,檔案被分成若干個資料塊,這若干個資料塊存放在一組 DataNode上。NameNode執行檔案系統的名稱空間,如開啟、關閉、重新命名檔案或目錄等,也負責資料塊到具體DataNode的對映。DataNode負責處理檔案系統客戶端的檔案讀寫,並在NameNode的統一排程下進行資料庫的建立、刪除和複製工作。NameNode是所有HDFS後設資料的管理者,使用者資料永遠不會經過NameNode。

   2 HDFS 設計目標

  自動快速檢測應對硬體錯誤

  流式訪問資料

  移動計算比移動資料本身更划算

  簡單一致性模型

  異構平臺可移植

  移動計算和移動資料
在學習大資料的時候接觸了移動資料和移動計算這兩種聯絡緊密而又有很大不同的概念,
其中移動計算也叫做本地計算。在以前的資料處理中時使用的
移動資料,其實就是將需要處理的資料傳輸到存放不同處理資料方式邏輯的各個節點上。這樣做的效率很低,特別
是大資料中的資料量是很大的,至少都是GB以上,更大的是TB、PB甚至更大,而且磁碟I/O、網路I/O的效率是很
低的,這樣處理起來就需要很長的時間,遠遠不能滿足我們的要求。而移動計算就出現了。
移動計算,也叫做本地計算,是資料就存放在節點上不再變動,而是將處理邏輯程式傳輸到各個資料節點上。由於
處理程式的大小肯定不會特別的大,這樣就可以實現很快將程式傳輸到存放資料的各個節點上去,然後本地執行處
理資料,效率高。現在的大資料處理技術都是採用這種方式。
HDFS模型例子:
班級中有這麼多筆記本其實就可以組成一個叢集是吧,然後隔壁班需要將檔案儲存到筆記本中,一個一個進來隨便找
一個筆記本儲存,走了之後,過了一段時間,需要將檔案取走,但是每一個人都不知道自己上傳到那個伺服器上了,那麼每
臺都需要找,,這樣一來操作的複雜度就高了,那麼需要怎麼改善這個問題?
犧牲一下,我的筆記本不存資料了,專門記錄儲存的的過程(NameNode),第一個人進來先找我,說我要儲存檔案,然後我
說去第一臺電腦存吧,然後就去第一臺電腦儲存了,它在儲存檔案的時候,上傳檔案需要等幾分鐘,然後第二個人進來了,
也要存檔案,然後我說你去第二臺電腦上儲存,那麼我與儲存人之間的互動資訊量大嗎?不大,是吧我的主要作用就是告
訴對方去哪儲存, 第一臺電腦在傳第二臺電腦也再傳,是不是同時在傳,那麼這就相當於負載了,那麼他們在上傳的時候
是獨立的資源,而不會去搶佔資源.
問題:什麼時候記錄這個儲存記錄?
是在一開始對話的時候我就記錄,還是在當他傳完資料後記錄?
一定是傳完資料後記錄,這是為了資料的一致性
上傳成功後,是上傳人員告訴我上傳成功還是電腦給傳送資訊上傳成功
一定是電腦傳送資訊上傳成功,因為只有電腦去認了上傳成功了有檔案有記錄就OK
是不是很簡單,很輕鬆啊,要是早幾年聽是不是HDFS就是你開發的了 

   HDFS 的特點

  優點:

   高可靠性: Hadoop按位儲存和處理資料的能力值得人們信賴;

   高擴充套件性: Hadoop是在可用的計算機集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。

   高效性: Hadoop能夠在節點之間動態地移動資料,並保證各個節點的動態平衡,因此處理速度非常快。

   高容錯性: Hadoop能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。

  缺點:

  不適合低延遲資料訪問。

  無法高效儲存大量小檔案。

  不支援多使用者寫入及任意修改檔案。

   1.4 hdfs 核心設計思想及作用
  • 分而治之:將大檔案、大批次檔案,分散式存放在大量伺服器上,以便於採取分而治之的方式對海量資料進行運算分析;
  • 為各類分散式運算框架(如: mapreduce,spark,tez,……)提供資料儲存服務
  • hdfs更具體描述

     首先,它是一個檔案系統 ,用於儲存檔案,透過統一的名稱空間 ——目錄樹來定位檔案

     其次,它是分散式的 ,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各自的角色;

   1.5  重要特性如下:

  HDFS中的檔案在物理上是 分塊儲存( block) ,塊的大小可以透過配置引數 ( dfs.blocksize)來規定,預設大小在hadoop2.x版本中是128M,老版本中是64M。

  HDFS檔案系統會給客戶端提供一個 統一的抽象目錄樹 ,客戶端透過路徑來訪問檔案,形如: hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

   目錄結構及檔案分塊資訊 (後設資料)的管理由namenode節點承擔——namenode是HDFS叢集主節點,負責維護整個hdfs檔案系統的目錄樹,以及每一個路徑(檔案)所對應的block塊資訊(block的id,及所在的datanode伺服器)。

   檔案的各個 block的儲存管理由datanode節點承擔--- datanode是HDFS叢集從節點,每一個block都可以在多個datanode上儲存多個副本(副本數量也可以透過引數設定dfs.replication)。

   HDFS 架構組成

   NameNode(NN)

   基於記憶體儲存   :不會和磁碟發生交換隻存在記憶體中

  這樣做的主要目的是為了快 , 但是記憶體儲存的一個通病就是掉電易失

  一旦斷電記憶體中儲存的資料就什麼都沒有了 , 所以就需要持久化了 ( 有點打臉了因為是需要到磁碟中的儲存 )

   NameNode 持久化

   NameNode metadate 資訊在啟動後會載入到記憶體

  儲存到磁碟中有兩種方法 :

  第一種 : 在某個時間點以類似於 ”拍快照”的形式將資料資訊儲存到磁碟中

   metadata 儲存到磁碟檔名為” fsimage ,Block 的位置資訊不會儲存到 fsimage

  若是回覆 , 需要等待 DataNode 重新彙報資訊 Block每副本位置(由DataNode上報)

  第二種 : 以日誌的方式生成檔案 edit log 記錄對 metadata 的操作日誌

  NameNode主要功能:

  接受客戶端的讀寫服務, 收集 DataNode彙報的Block列表資訊

  NameNode儲存metadata資訊包括

  檔案 所屬權和許可權 , 檔案大小,時間( Block列表:Block偏移量),位置資訊

   DataNode (DN)

   DataNode是Block真正儲存的地方。DataNode的本地磁碟以檔案形式儲存著Block資訊。同時還儲存著Block的後設資料資訊檔案。 

  後設資料主要儲存 MD5 值 用來進行驗證
HDFS在啟動時,DataNode會向NameNode彙報block的資訊。 
DataNode透過向NameNode傳送心跳保持與其聯絡(3秒一次),如果NameNode 10分鐘沒有收到DataNode的心跳,則認為其已經lost,並複製其上的block到其它DataNode。

   SecondaryNameNode(SNN)

   初看名字,你可能會以為 SecondaryNameNode是NameNode的備份,實際上,SecondaryNameNode的主要作用並不是這個,當然它也可以用來做備份。 
要了解 SecondaryNameNode的作用,就不得不說一下HDFS的啟動過程。 
上面我們已經提到了兩個檔案 fsimage和edits。fsimage是當前HDFS系統的快照。edits記錄了對HDFS的各種操作日誌。 

  假設 : 有一個叢集跑了 10 年一點問題都沒有 ,fsimage 是十年前的一個點 , 為了不影響效能 , 只記錄了一次 , edits 一直在記錄日子 , 吧唧 , 伺服器當機了 , 重啟恢復 ,

   HDFS在啟動的時候,根據fsimage和edit log 日誌可以得到系統當前最新的狀態,併產生一個新的 fsimage檔案。這樣的啟動時很耗時間的。尤其是當edit log 檔案非常大的時候,合併會佔用很多額外的時間。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2649991/,如需轉載,請註明出處,否則將追究法律責任。

相關文章