hadoop 原始碼分析HDFS架構演進
- HDFS 如何實現有狀態的高可用架構
- HDFS 如何解決單機記憶體受限問題
- HDFS 支援億級流量的密碼
- SecondaryNameNode 作用
1.1 HDFS 架構演進之路
Hadoop 大版本有三個,Hadoop1、hadoop2、Hadoop3,對應的HDFS 也有三個版本 HDFS1、HDFS2、HDFS3,本文會介紹 三個版本之間的架構區別
Namenode 主要是接收客戶端的請求和負責後設資料管理,而 Datanode 主要就是負責儲存資料。Datanode 中儲存的資料都是一個個的塊,每個塊大小預設 64M
具體使用一個客戶端上傳資料的示例來說明:
- HDFS 會把使用者上傳的檔案切分成很多個 block,預設 每個 block 大小是64M,
-
然後把這些 block 儲存在不同的 datanode 上,並且為每個 block 生成 3 個副3.
-
而每個 block 存在哪個 datanode上以及哪些 block 屬於一個檔案這些資訊都儲存在 Namanode 上,這些資料就是後設資料
-
Namanode 為了快速響應使用者的請求,還會把這些後設資料放到記憶體中。
1.3 HDFS2 架構-實現有狀態的高可用架構
雖然 HDFS1 解決了分散式儲存的問題,但是他的設計還是有一些缺陷,比如:
- 單點問題:因為 HDFS1 中只有一個 Namenode ,而所有的後設資料資訊都儲存在 Namenode 上,而一旦 Namenode 出現問題,所有的後設資料就會丟失,而整個叢集也就無法使用了
- 記憶體受限問題:Namenode 為了快速響應使用者的請求,會把所有後設資料資訊放到記憶體中,隨著時間的推移,後設資料資訊增多,必然會撐爆記憶體
HA
解決單點問題,使用
聯邦
解決記憶體受限問題。
3.1 HDFS 支援的億級流量具體什麼?
這裡所屬的
支援億級流量
具體是指客戶端的請求,因為 Namenode 管理後設資料,所有任務在執行的時候都要請求 Namenode 的後設資料,而一旦任務多了這個請求量還是很可觀的。
所以 Namenode 必須可以應對 億級 的後設資料請求,為了應對這麼大流量的訪問所以 Namenode 才把所有的後設資料資訊都放到記憶體中了。
但是又為了資料安全,Namenode 又會把 後設資料資訊放到磁碟上,且為了 HA 後設資料還得寫到 JournalNode 叢集中。
那就是
雙緩衝
和
分端加鎖
記憶體1
中,當
記憶體1
中的資料寫到一定程度的時候,把
記憶體1
與
記憶體2
交換(這裡是指標交換,不是記憶體的copy),然後把交換後的記憶體重新整理到磁碟或者Journalnode中。
3.3 分段加鎖
在 Namenode 後設資料管理這塊,HDFS 使用了多執行緒去實現的,很多地方加了使用
synchronized
加了鎖,但是它並沒有對所有程式碼加鎖,而是隻對有執行緒安全問題的地方加鎖。
推薦閱讀:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2915340/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop3.2.1 【 HDFS 】原始碼分析 : Secondary Namenode解析Hadoop原始碼
- Hadoop3.2.1 【 HDFS 】原始碼分析 : Standby Namenode解析Hadoop原始碼
- Hadoop的HDFS架構入門Hadoop架構
- 林意群:eBay HDFS架構的演進優化實踐架構優化
- Apache Hadoop文件翻譯之一(HDFS架構)ApacheHadoop架構
- hadoop原始碼分析Hadoop原始碼
- 架構演進之「微服務架構」架構微服務
- Hadoop3.2.1 【 HDFS 】原始碼分析 : 檔案系統資料集 [一]Hadoop原始碼
- Hadoop3.2.1 【 HDFS 】原始碼分析 : DataXceiver: 讀取資料塊 解析 [二]Hadoop原始碼
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- 聊聊演進式架構架構
- Airbnb的架構演進AI架構
- Serverless 架構的演進Server架構
- hadoop原始碼_hdfs啟動流程_2_DataNodeHadoop原始碼
- Hadoop技術內幕:深入解析Hadoop和HDFS 1.3準備 Hadoop 原始碼Hadoop原始碼
- 今日頭條架構演進之路——高壓下的架構演進專題架構
- thrift原始碼分析-架構設計原始碼架構
- Hadoop演進與Hadoop生態Hadoop
- Python後端架構演進Python後端架構
- Serverless 架構模式及演進Server架構模式
- hadoop原始碼_hdfs啟動流程_3_心跳機制Hadoop原始碼
- jQuery原始碼分析系列 : 整體架構jQuery原始碼架構
- 萬表商城Android架構演進Android架構
- vivo推送平臺架構演進架構
- 技術架構演進的思考架構
- Serverless 架構演進與實踐Server架構
- Flutter Fish Redux架構演進2.0FlutterRedux架構
- Hadoop學習——Client原始碼分析Hadoopclient原始碼
- Hadoop–HDFSHadoop
- 精盡 MyBatis 原始碼分析 - 整體架構MyBatis原始碼架構
- 原始碼分析三:OkHttp(1)—總體架構原始碼HTTP架構
- HDFS架構及原理架構
- 圖解分散式架構的演進圖解分散式架構
- 微服務事件驅動架構演進微服務事件架構
- 馬蜂窩支付中心架構演進架構
- 從MVC到DDD的架構演進MVC架構
- 統一接入層架構的演進架構
- 排隊免單系統原始碼架構分析原始碼架構