HDFS核心的設計思想
??HDFS 集群中,主要的角色有 NameNode 和 DataNode 兩大角色 (SecondaryNamenode 和 Client);
??NameNode 負責管理檔案系統的元資料,并回應 Client 的請求;
??DataNode 負責存盤用戶的檔案塊(block),進行讀寫檔案,并向 NameNode 發送心跳資訊,
??檔案會按照固定的大小切分成塊(block),每一個 block 的默認大小為 128M;
??每一個 block 都會存在多個副本,形成備份存在于不同的 DataNode 中,默認的副本數為 3 ;
??DataNode 會向 NameNode 定期的發送心跳,其中包含 bolck 的資訊及 DataNode 自身狀態;
??HDFS 的內部作業機制對 Client 是保持透明的,客戶端通過 NameNode 訪問檔案系統;
一、Hadoop 心跳機制
??1、Hadoop 中使用的是主從架構 Master/Slave,Master 中有 NameNode、ResourceManage,Salve 中有 DataNode、NodeManage;
??2、Master 啟動的時候,會啟動一個 IPC 服務,等待 Slave 的鏈接;
??3、Slave 啟動的時候,會主動的鏈接 Master 的 ipc server 服務;
??4、Slave 會每隔 3 秒(默認值)訪問一次 Master 的 ipc server 服務;
??5、將這種 每隔 3 秒訪問一次的機制稱之為心跳機制;
??6、心跳的間隔時長可以通過 dfs.heartbeat.interval 的引數進行設定;
??7、NameNode 通過心跳得知 DataNode 的狀態;ResourceManager 通過心跳得知 NodeManager 的狀態;
??8、如果 Master 長時間沒有收到 Slave 的心跳,則認為該 Slave 節點掛掉了;
??9、NameNode 感知 DataNode 掉線死亡的時長計算公式:2 倍的嘗試重新連接時間 + 10 倍的心跳時間;默認值 2 倍的 5 分鐘 + 10 倍的 3 秒 = 10 分鐘 30 秒;
二、安全模式
??1、在啟動集群的時候,會發現 NameNode 進去了安全模式,即 SafeMode;
??2、SafeMode 是 NameNode 的一種狀態 (active/standby/safemode);
??3、當 NameNode 發現集群中的 block 的丟失率達到一定比例時(默認為 0.1%),NameNode 會進入 SafeMode,在安全模式下,Client 只能對檔案進行查看操作,不能對檔案進行讀寫移動等的操作;
??4、SafeMode 的丟失率可以通過引數 dfs.safemode.threshold.pct 配置 默認為 0.999f;
??5、修復宕機的 DataNode 和 手動強制,可以使 NameNode 退出 SafeMode;
正常啟動集群的時候 NameNode 進入 SafeMode 的原理:
??1、NameNode 中儲存集群的元資料,包含檔案路徑、副本數、blockId、每個 block 位置及 block 所在的 DataNode 的資訊,
??2、NameNode 啟動的時候會將磁盤中的 fsimage 檔案內資訊加載到記憶體,但是 fsimage 不包含 DataNode 的資訊;
??3、所以 NameNode 會認為此時全部的 DataNode 都掛掉了,且 block 全部丟失;
??4、當全部的 DataNode 啟動完畢,并且向 NameNode 發送心跳,發送 block 的資訊之后;
??5、NameNode 會將元資料中的 block 和 DataNode 的資訊補全;
??6、此時 NameNode 才會退出 SafeMobe;
三、副本存放策略
??HDFS 中,將檔案分塊并進行副本存放,是保證資料的可靠性和高性能的關鍵;
??受到網路帶寬,服務器機架,保持高可靠性等因素的影響,HDFS 具有一套副本存放策略;
副本存放策略(默認副本為 3 ):
??1、當前 Client 所在的節點存在 DataNode,那么第一塊副本將放在 和 Client 同節點的 DataNode 上;
??2、當前 Client 所在的節點不存在 DataNode,那么系統隨機的選擇不繁忙的 DataNode 進行存盤;
??3、第二塊副本放在與第一個節點不同的機架中的不繁忙的 DataNode 中;
??4、第三個副本放在與第二個相同的機架,但不同的節點中;
??5、HDFS 設定副本數不超過 DataNode 的總數,所以就算設定了多于 DataNode 數量的副本數,但是 HDFS 存盤的副本數也和 DataNode 的總數相同;
??6、副本數可以通過組態檔,或者上傳檔案時的 configuration 進行設定;引數名稱:dfs.replication
四、負載均衡
??節點與節點之間的磁盤利用率不平衡是 HDFS 集群非常容易出現的情況;
??尤其是存在 DataNode 故障,和為集群添加新的 DataNode 的時候;
??HDFS 存在自動的平衡機制,當最多存盤的磁盤利用率大于最小存盤的節點的利用率到一定的閾值時(默認為 10%),HDFS 將啟動自動均衡;
??但是 HDFS 的自動均衡非常的緩慢,因為 HDFS 被設定為不允許 balance 操作占用很大的網路帶寬;帶寬的默認值(1M/s)可以調整(hdfs dfsadmin -setBalanacerBandwidth newbandwidth);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425060.html
標籤:其他
