HBase 系列(二)—— HBase 系統架構及數據結構

来源:https://www.cnblogs.com/heibaiying/archive/2019/08/24/11403502.html
-Advertisement-
Play Games

一、基本概念 一個典型的 Hbase Table 表如下: 1.1 Row Key (行鍵) 是用來檢索記錄的主鍵。想要訪問 HBase Table 中的數據,只有以下三種方式: + 通過指定的 進行訪問; + 通過 Row Key 的 range 進行訪問,即訪問指定範圍內的行; + 進行全表掃描 ...


一、基本概念

一個典型的 Hbase Table 表如下:

1.1 Row Key (行鍵)

Row Key 是用來檢索記錄的主鍵。想要訪問 HBase Table 中的數據,只有以下三種方式:

  • 通過指定的 Row Key 進行訪問;

  • 通過 Row Key 的 range 進行訪問,即訪問指定範圍內的行;

  • 進行全表掃描。

Row Key 可以是任意字元串,存儲時數據按照 Row Key 的字典序進行排序。這裡需要註意以下兩點:

  • 因為字典序對 Int 排序的結果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。如果你使用整型的字元串作為行鍵,那麼為了保持整型的自然序,行鍵必須用 0 作左填充。

  • 行的一次讀寫操作時原子性的 (不論一次讀寫多少列)。

1.2 Column Family(列族)

HBase 表中的每個列,都歸屬於某個列族。列族是表的 Schema 的一部分,所以列族需要在創建表時進行定義。列族的所有列都以列族名作為首碼,例如 courses:historycourses:math 都屬於 courses 這個列族。

1.3 Column Qualifier (列限定符)

列限定符,你可以理解為是具體的列名,例如 courses:historycourses:math 都屬於 courses 這個列族,它們的列限定符分別是 historymath。需要註意的是列限定符不是表 Schema 的一部分,你可以在插入數據的過程中動態創建列。

1.4 Column(列)

HBase 中的列由列族和列限定符組成,它們由 :(冒號) 進行分隔,即一個完整的列名應該表述為 列族名 :列限定符

1.5 Cell

Cell 是行,列族和列限定符的組合,並包含值和時間戳。你可以等價理解為關係型資料庫中由指定行和指定列確定的一個單元格,但不同的是 HBase 中的一個單元格是由多個版本的數據組成的,每個版本的數據用時間戳進行區分。

1.6 Timestamp(時間戳)

HBase 中通過 row keycolumn 確定的為一個存儲單元稱為 Cell。每個 Cell 都保存著同一份數據的多個版本。版本通過時間戳來索引,時間戳的類型是 64 位整型,時間戳可以由 HBase 在數據寫入時自動賦值,也可以由客戶顯式指定。每個 Cell 中,不同版本的數據按照時間戳倒序排列,即最新的數據排在最前面。

二、存儲結構

2.1 Regions

HBase Table 中的所有行按照 Row Key 的字典序排列。HBase Tables 通過行鍵的範圍 (row key range) 被水平切分成多個 Region, 一個 Region 包含了在 start key 和 end key 之間的所有行。

每個表一開始只有一個 Region,隨著數據不斷增加,Region 會不斷增大,當增大到一個閥值的時候,Region 就會等分為兩個新的 Region。當 Table 中的行不斷增多,就會有越來越多的 Region

Region 是 HBase 中分散式存儲和負載均衡的最小單元。這意味著不同的 Region 可以分佈在不同的 Region Server 上。但一個 Region 是不會拆分到多個 Server 上的。

2.2 Region Server

Region Server 運行在 HDFS 的 DataNode 上。它具有以下組件:

  • WAL(Write Ahead Log,預寫日誌):用於存儲尚未進持久化存儲的數據記錄,以便在發生故障時進行恢復。
  • BlockCache:讀緩存。它將頻繁讀取的數據存儲在記憶體中,如果存儲不足,它將按照 最近最少使用原則 清除多餘的數據。
  • MemStore:寫緩存。它存儲尚未寫入磁碟的新數據,並會在數據寫入磁碟之前對其進行排序。每個 Region 上的每個列族都有一個 MemStore。
  • HFile :將行數據按照 Key\Values 的形式存儲在文件系統上。

Region Server 存取一個子表時,會創建一個 Region 對象,然後對錶的每個列族創建一個 Store 實例,每個 Store 會有 0 個或多個 StoreFile 與之對應,每個 StoreFile 則對應一個 HFile,HFile 就是實際存儲在 HDFS 上的文件。

三、Hbase系統架構

3.1 系統架構

HBase 系統遵循 Master/Salve 架構,由三種不同類型的組件組成:

Zookeeper

  1. 保證任何時候,集群中只有一個 Master;

  2. 存貯所有 Region 的定址入口;

  3. 實時監控 Region Server 的狀態,將 Region Server 的上線和下線信息實時通知給 Master;

  4. 存儲 HBase 的 Schema,包括有哪些 Table,每個 Table 有哪些 Column Family 等信息。

Master

  1. 為 Region Server 分配 Region ;

  2. 負責 Region Server 的負載均衡 ;

  3. 發現失效的 Region Server 並重新分配其上的 Region;

  4. GFS 上的垃圾文件回收;

  5. 處理 Schema 的更新請求。

Region Server

  1. Region Server 負責維護 Master 分配給它的 Region ,並處理髮送到 Region 上的 IO 請求;

  2. Region Server 負責切分在運行過程中變得過大的 Region。

3.2 組件間的協作

HBase 使用 ZooKeeper 作為分散式協調服務來維護集群中的伺服器狀態。 Zookeeper 負責維護可用服務列表,並提供服務故障通知等服務:

  • 每個 Region Server 都會在 ZooKeeper 上創建一個臨時節點,Master 通過 Zookeeper 的 Watcher 機制對節點進行監控,從而可以發現新加入的 Region Server 或故障退出的 Region Server;

  • 所有 Masters 會競爭性地在 Zookeeper 上創建同一個臨時節點,由於 Zookeeper 只能有一個同名節點,所以必然只有一個 Master 能夠創建成功,此時該 Master 就是主 Master,主 Master 會定期向 Zookeeper 發送心跳。備用 Masters 則通過 Watcher 機制對主 HMaster 所在節點進行監聽;

  • 如果主 Master 未能定時發送心跳,則其持有的 Zookeeper 會話會過期,相應的臨時節點也會被刪除,這會觸發定義在該節點上的 Watcher 事件,使得備用的 Master Servers 得到通知。所有備用的 Master Servers 在接到通知後,會再次去競爭性地創建臨時節點,完成主 Master 的選舉。

四、數據的讀寫流程簡述

4.1 寫入數據的流程

  1. Client 向 Region Server 提交寫請求;

  2. Region Server 找到目標 Region;

  3. Region 檢查數據是否與 Schema 一致;

  4. 如果客戶端沒有指定版本,則獲取當前系統時間作為數據版本;

  5. 將更新寫入 WAL Log;

  6. 將更新寫入 Memstore;

  7. 判斷 Memstore 存儲是否已滿,如果存儲已滿則需要 flush 為 Store Hfile 文件。

更為詳細寫入流程可以參考:HBase - 數據寫入流程解析

4.2 讀取數據的流程

以下是客戶端首次讀寫 HBase 上數據的流程:

  1. 客戶端從 Zookeeper 獲取 META 表所在的 Region Server;

  2. 客戶端訪問 META 表所在的 Region Server,從 META 表中查詢到訪問行鍵所在的 Region Server,之後客戶端將緩存這些信息以及 META 表的位置;

  3. 客戶端從行鍵所在的 Region Server 上獲取數據。

如果再次讀取,客戶端將從緩存中獲取行鍵所在的 Region Server。這樣客戶端就不需要再次查詢 META 表,除非 Region 移動導致緩存失效,這樣的話,則將會重新查詢並更新緩存。

註:META 表是 HBase 中一張特殊的表,它保存了所有 Region 的位置信息,META 表自己的位置信息則存儲在 ZooKeeper 上。

更為詳細讀取數據流程參考:

HBase 原理-數據讀取流程解析

HBase 原理-遲到的‘數據讀取流程部分細節

參考資料

本篇文章內容主要參考自官方文檔和以下兩篇博客,圖片也主要引用自以下兩篇博客:

官方文檔:

更多大數據系列文章可以參見 GitHub 開源項目大數據入門指南


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 前面幾篇文章為大家介紹了各種SQL語法的使用,本篇文章將主要介紹MySQL用戶及許可權相關知識,如果你不是DBA的話可能平時用的不多,但是瞭解下也是好處多多。 1.創建用戶 官方推薦創建語法為: 通常我們常用的創建語法為: 語法說明如下: 1) 指定創建用戶賬號,格式為 'user_name' ...
  • /*the waiting game:儘管人生如此艱難,不要放棄;不要妥協;不要失去希望*/ 隨著MySQL MGR的版本的升級以及技術成熟,在把MHA拉下神壇之後, MGR越來越成為MySQL高可用的首選方案。MGR的搭建並不算很複雜,但是有一系列手工操作步驟,為了簡便MGR的搭建和故障診斷,這裡 ...
  • datanode無法連接到namenode namenode在清空hadoop.tmp.dir和namenode.dir文件夾重新格式化後,datanode還是無法連接到namenode並報錯: hdfs.server.datanode.DataNode: Problem connecting to ...
  • 一、集群規劃 這裡搭建一個 3 節點的 HBase 集群,其中三台主機上均為 。同時為了保證高可用,除了在 hadoop001 上部署主 服務外,還在 hadoop002 上部署備用的 服務。Master 服務由 Zookeeper 集群進行協調管理,如果主 不可用,則備用 會成為新的主 。 二、前 ...
  • MySQL常見的8種SQL錯誤用法 前言 MySQL在2016年仍然保持強勁的資料庫流行度增長趨勢。越來越多的客戶將自己的應用建立在MySQL資料庫之上,甚至是從Oracle遷移到MySQL上來。但也存在部分客戶在使用MySQL資料庫的過程中遇到一些比如響應時間慢,CPU打滿等情況。 阿裡雲RDS專 ...
  • SQL單表查詢 一、單表查詢的語法 select列名1,列名2... from 表名 where 條件 group by field having 篩選 order by field limit 限制條數 二、關鍵字的執行優先順序 from where group by having select d ...
  • Explain工具介紹 使用EXPLAIN關鍵字可以模擬優化器執行SQL語句,分析查詢語句或是結構的性能瓶頸。在select語句之前增加explaion關鍵字,MySQL會在查詢上設置一個標記,執行查詢會返回執行計劃的信息,而不是執行SQL。 Explaion分析示例 actor建表語句: CREA ...
  • Mongodb最基礎入門教程 如果想瞭解一下redis的入門教程,可以去看一下我的上一篇博客 Mongodb的安裝大家可以參考一下其他博主的博客,這裡我就不做介紹了。不過值得註意的是,在Linux版本中如果啟動mongodb的時候出現下麵這個錯誤(在windows版本中不會出現下麵的問題): mon ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...