#學習筆記#章三-分布式文件系統HDFS-廈大MOOC

3.1.1 計算機集群結構

  1. 分布式文件系統,把文件分布存儲到多個計算機節點上,成千上萬的計算機節點構成計算機集群。
  2. 與之前使用多個處理器和專用高級硬件的并行化處理裝置不同的是,此由普通硬件構成,降低開銷。

有點像路由網絡

STR.png

3.1.2 分布式文件系統的結構

  1. 一類叫“主節點”(Master Node)或者也被稱為“名稱結點”(NameNode)
  2. 一類叫“從節點”(Slave Node)或者也被稱為“數據節點”(DataNode)
STR1.png
主節點:像核心交換機,記錄路由表等等重要信息
從節點:像單點的終端服務器,提供數據/流量服務

3.2 HDFS簡介

優點:
●兼容廉價的硬件設備
●流數據讀寫
●大數據集
●簡單的文件模型
●強大的跨平臺兼容性

局限
●不適合低延遲數據訪問
●無法高效存儲大量小文件
●不支持多用戶寫入及任意修改文件

3.3.2 名稱節點

?在HDFS中,名稱節點(NameNode)負責管理分布式文件系統的命名空間
(Namespace),保存了兩個核心的數據結構,即FsImage和EditLog

component-1.png
namenode.png

名稱節點運行期間EditLog不斷變大的問題: SecondaryNameNode第二名稱節點

第二名稱節點是HDFS架構中的一個組成部分,它是用來保存名稱節點中對HDFS 元數據信息的備份,并減少名稱節點重啟的時間。SecondaryNameNode一般是單獨運行在一臺機器上

SecondaryNameNode.png
FsImage: 有點像配置和現場日志
EditLog:有點像CLI歷史
太長的時候就搞個backup file,存另一臺機做備份。
然后跑一個新的日志。

3.3.2 數據節點(DataNode)

?數據節點是分布式文件系統HDFS的工作節點,負責數據的存儲和讀取,會根據客戶端或者是名稱節點的調度來進行數據的存儲和檢索,并且向名稱節點定期發送自己所存儲的塊的列表

?每個數據節點中的數據會被保存在各自節點的本地Linux文件系統中

3.4.1. HDFS體系結構概述

這里比較像路由網絡,名稱節點像一個核心交換機,
其他數據節點就像一個單臺的服務器,就是把流量變成了一個數據網絡。
文件號或數據塊號就像流量里面的報頭一樣,數據塊號就像路由表,
核心交換機,決定它下一跳是哪里,這里的namenode就決定datanode的服務器在哪里。
這里提到的文件均衡,就有點像流量的負載均衡。

HDFS采用了主從(Master/Slave)結構模型,一個HDFS集群包括一個名稱節點(NameNode)和若干個數據節點(DataNode)(如圖3-4所示)。名稱節點作為中心服務器,負責管理文件系統的命名空間及客戶端對文件的訪問。集群中的數據節點一般是一個節點運行一個數據節點進程,負責處理文件系統客戶端的讀/寫請求,在名稱節點的統一調度下進行數據塊的創建、刪除和復制等操作。每個數據節點的數據實際上是保存在本地Linux文件系統中的

HDFS-str.png

3.4.3 通信協議

? 所有的HDFS通信協議都是構建在TCP/IP協議基礎之上的

  • Hadoop 1.0 的局限性
    HDFS只設置唯一一個名稱節點,這樣做雖然大大簡化了系統設計,但也帶來了一些明顯的局限性,具體如下:
    (1)命名空間的限制:名稱節點是保存在內存中的,因此,名稱節點能夠容納的對象(文件、塊)的個數會受到內存空間大小的限制。
    (2)性能的瓶頸:整個分布式文件系統的吞吐量,受限于單個名稱節點的吞吐量。
    (3)隔離問題:由于集群中只有一個名稱節點,只有一個命名空間,因此,無法對不同應用程序進行隔離。
    (4)集群的可用性:一旦這個唯一的名稱節點發生故障,會導致整個集群變得不可用。
這里無論是數據的備份還是流水,跟路由器和交換機的溝通是很像的,
它都需要有響應,然后要有確認。
1. 命名空間的限制,就像路由表不能太大,不然就很難跳過去
2. 性能的瓶頸,就像通信報文的窗口期不能太大,單個名稱節點的吞吐量太大,時延會很大
3. 隔離問題,就像內網的時候,如果你隔離不好的話就會串IP
4. 集訓可用性,就像核心交換機不能只有一臺,必須得有冗余,不然一臺機當了,整個網絡都當掉了。

3.5 HDFS存儲原理

3.5.1 冗余數據保存

copy-1.png

1.數據存放

?第一個副本:放置在上傳文件的數據節點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節點
?第二個副本:放置在與第一個副本不同的機架的節點上
?第三個副本:與第一個副本相同機架的其他節點上
?更多副本:隨機節點

how-to-place.png

3.5.3 數據錯誤與恢復

  1. 名稱節點出錯: 備機上
    根據備份服務器SecondaryNameNode中的FsImage和Editlog數據進行恢復。

  2. 數據節點出錯: failed heartbeat--> 減壞點-->重生冗余
    ?HDFS和其它分布式文件系統的最大區別就是可以調整冗余數據的位置
    a. failed heartbeat: 數據節點就會被標記為“宕機”,節點上面的所有數據都會被標記為“不可讀”,名稱節點不會再給它們發送任何I/O請求
    b. 一旦發現某個數據塊的副本數量小于冗余因子,就會啟動數據冗余復制,為它生成新的副本

  3. 數據出錯: 校驗-->重傳 -->修正
    ?客戶端在讀取到數據后,會采用md5和sha1對數據塊進行校驗,以確定讀取到正確的數據
    ?校驗出錯,客戶端就會請求到另外一個數據節點讀取該文件塊,并且向名稱節點報告這個文件塊有錯誤,名稱節點會定期檢查并且重新復制這個塊

3.6 HDFS數據讀寫過程

暫時不會寫java,讓我遲點再來看。
粗看好像跟python的 open, read, close 很像

3.7.1 HDFS常用命令

粗看下去就是 linux指令前面加個Hadoop...


2018.6.9.

以上括起來的注釋來自我的瞎類比,這樣對我自己比較好學。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 當數據量增大到超出了單個物理計算機存儲容量時,有必要把它分開存儲在多個不同的計算機中。那些管理存儲在多個網絡互連的...
    單行線的旋律閱讀 1,949評論 0 7
  • feisky云計算、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,912評論 0 5
  • 分布式系統面臨的第一個問題就是數據分布,即將數據均勻地分布到多個存儲節點。另外,為了保證可靠性和可用性,需要將數據...
    olostin閱讀 4,625評論 2 26
  • 讀書筆記 2017-09-25 原文:是誰給夢想設定了年齡的限制,讓它穿上了條件的枷鎖,被塵封在了時間的長河里?答...
    農婦么么噠閱讀 478評論 0 0
  • 想一個人,約等于我人在世上,偶爾也會懷疑自己是不是真的來對了現場如果不是應該有個誰,跟我一起抬頭仰望天空八成也會是...
    JetLu閱讀 395評論 0 2