09 大資料之Hadoop(第四部 HDFS)

荒-於嬉發表於2020-11-01

Hadoop之HDFS

HDFS作用及定義

隨著資料量越來越大,單臺伺服器已經滿足不了大量資料的儲存,多臺主機管理又極其麻煩,所以出現了分散式檔案系統:如Hadoop的HDFS,HDFS通過目錄樹結構來定位檔案,其次,他可以將大量伺服器組成一個叢集用來儲存資料,對使用者來說就像管理一臺主機簡便,並且還有高吞吐量的優勢.HDFS適合一次寫入,多次讀出,但是檔案只能追加而不能修改,適合做資料分析等.

HDFS優點
  1. 容錯性
    HDFS檔案可以儲存多個副本,當叢集中某一臺或者多臺節點當機,叢集中剩餘的資料會再次自動同步並完善缺少的副本,不會丟失資料.
  2. 適合處理大資料量
    能夠處理GB,TB甚至EB級別資料.
    能夠處理百萬規模以上的檔案數量
  3. 可執行在廉價的伺服器上,並且十分穩定.
缺點
  1. 不適合低延遲資料訪問,如毫秒級的儲存查詢資料,是做不到的.
  2. 無法高效的對大量小檔案進行儲存
    原因:
    1. HDFS的NameNode節點只有一臺,而且他的記憶體是有限的,NameNode會儲存每一個檔案的後設資料索引資訊,類似於Linux的INode,每一個檔案在NameNode中至少佔用150B的空間,大量小檔案會佔用極多的NameNode記憶體,而NameNode記憶體一旦過多,Linux系統也就無法執行了,系統為了自保,會將佔用大記憶體的程式結束掉,NameNode死掉,叢集也就無法使用了.
    2. 小檔案儲存的定址時間會超出儲存時間,他違反了HDFS的設計目標
  3. 不支援併發寫入檔案隨即修改.一個檔案只允許一個執行緒操作,不允許多個.
  4. 僅支援append(追加),不支援檔案的修改.

HDFS組成架構

NameNode

他是HDFS的管理者,負責管理了HDFS名稱空間,配置副本,管理資料庫對映,客戶端讀寫請求等.

DataNode

資料儲存節點
執行資料塊的讀寫操作

client

檔案切片:

檔案上傳HDFS的時候,client將檔案切分為一個個的block,然後進行上傳.預設block大小是128M

與NameNode互動,獲取檔案的位置資訊
與DataNode進行互動,讀或者寫入資料
提供一些命令來管理,如格式化,查詢或者刪除檔案

SecondaryNameNode

輔助NameNode,分擔其工作量,如定期合併simage 和Edits,並推送給NameNode
緊急情況,可通過其儲存的快照資料恢復NameNode,點選這裡檢視實際生產環境故障恢復案例

HDFS 塊的大小

  1. HDFS檔案在物理上預設分塊儲存,塊的大小可以通過引數dfs.blocksize來設定,2.x版本預設大小是128M,老版本是64M.

  2. HDFS檔案儲存實際佔用磁碟空間的大小是檔案的大小,也就是比如塊的大小是128M,檔案只有10M,在磁碟上佔用空間佔用空間也是10M.128M塊是為了減少磁碟定址時間.

  3. 如果定址時間為10ms,而定址時間為傳輸時間的1%為最佳,那麼傳輸時間等於 10ms * 100 = 1S.
    目前磁碟傳輸速率大約在100M/S左右,HDFS設定塊的大小也就是128M.

  4. HDFS塊設定過小會增加磁碟定址時間,而過大會導致從磁碟傳輸資料的時間會明顯大於定位這個塊開始位置所需的時間,程式再次還是會非常緩慢.

總結: 塊的大小取決於磁碟傳輸速率,如果是固態盤則不需要考慮這麼多,因為固態盤沒有磁軌不存在定址時間.

相關文章