華為雲HBase冷熱分離最佳實踐

来源:https://www.cnblogs.com/huaweiyun/archive/2023/09/25/17727856.html
-Advertisement-
Play Games

冷熱分離功能支持將冷熱數據存儲在不同的介質上,可以大大降低存儲成本,HBase支持對同一張表的數據進行冷熱分離存儲。 ...


本文分享自華為雲社區 《華為雲HBase 冷熱分離最佳實踐》,作者:pippo。

HBase介紹

HBase是Hadoop Database的簡稱,是建立在Hadoop文件系統之上的分散式面向列的資料庫,它具有高可靠、高性能、面向列和可伸縮的特性,提供快速隨機訪問海量數據能力。

HBase採用Master/Slave架構,由HMaster節點、RegionServer節點、ZooKeeper集群組成,底層數據存儲在HDFS上。

整體架構如圖所示:

HMaster主要負責:

  • 在HA模式下,包含主用Master和備用Master。
  • 主用Master:負責HBase中RegionServer的管理,包括表的增刪改查;RegionServer的負載均衡,Region分佈調整;Region分裂以及分裂後的Region分配;RegionServer失效後的Region遷移等。
  • 備用Master:當主用Master故障時,備用Master將取代主用Master對外提供服務。故障恢復後,原主用Master降為備用。

RegionServer主要負責:

  • 存放和管理本地HRegion。
  • RegionServer負責提供表數據讀寫等服務,是HBase的數據處理和計算單元,直接與Client交互。
  • RegionServer一般與HDFS集群的DataNode部署在一起,實現數據的存儲功能。讀寫HDFS,管理Table中的數據。

ZooKeeper集群主要負責:

  • 存放整個 HBase集群的元數據以及集群的狀態信息。
  • 實現HMaster主從節點的Failover。

HDFS集群主要負責:

  • HDFS為HBase提供高可靠的文件存儲服務,HBase的數據全部存儲在HDFS中。

結構說明:

Store

  • 一個Region由一個或多個Store組成,每個Store對應圖中的一個Column Family。

MemStore

  • 一個Store包含一個MemStore,MemStore緩存客戶端向Region插入的數據,當RegionServer中的MemStore大小達到配置的容量上限時,RegionServer會將MemStore中的數據“flush”到HDFS中。

StoreFile

  • MemStore的數據flush到HDFS後成為StoreFile,隨著數據的插入,一個Store會產生多個StoreFile,當StoreFile的個數達到配置的閾值時,RegionServer會將多個StoreFile合併為一個大的StoreFile。

HFile

  • HFile定義了StoreFile在文件系統中的存儲格式,它是當前HBase系統中StoreFile的具體實現。

HLog(WAL)

  • HLog日誌保證了當RegionServer故障的情況下用戶寫入的數據不丟失,RegionServer的多個Region共用一個相同的HLog。

HBase提供兩種API來寫入數據。

  • Put:數據直接發送給RegionServer。
  • BulkLoad:直接將HFile載入到表存儲路徑。

HBase 冷熱分離訴求

HBase是Hadoop Database的簡稱,是建立在Hadoop文件系統之上的分散式面向列的資料庫,它具有高可靠、高性能、面向列和可伸縮的特性,提供快速隨機訪問海量數據能力。

在海量大數據場景下,表中的部分業務數據隨著時間的推移僅作為歸檔數據或者訪問頻率很低,同時這部分歷史數據體量非常大,比如訂單數據或者監控數據,如果降低這部分數據的存儲成本將會極大的節省企業的成本。

冷熱分離功能支持將冷熱數據存儲在不同的介質上,冷數據的存儲類型為普通IO存儲,熱數據的存儲類型為超高IO存儲。普通IO存儲的價格僅為超高IO存儲的30%,大大降低了存儲成本。

HBase 冷熱分離介紹

HBase支持對同一張表的數據進行冷熱分離存儲。用戶在表上配置數據冷熱時間分界點後,HBase會依賴用戶寫入數據的時間戳(毫秒)和時間分界點來判斷數據的冷熱。數據開始存儲在熱存儲上,隨著時間的推移慢慢往冷存儲上遷移。同時用戶可以任意變更數據的冷熱分界點,數據可以從熱存儲到冷存儲,也可以從冷存儲到熱存儲。

整體架構如圖所示:

1236.png

命令介紹

設置表的冷熱分界線

創建冷熱分離表:

hbase(main):002:0> create 'hot_cold_table', {NAME=>'f', COLD_BOUNDARY=>'86400'}

參數說明:

NAME:需要冷熱分離的列族。

COLD_BOUNDARY:冷熱分離時間點,單位為秒(s)。例如COLD_BOUNDARY為86400,代表86400秒(一天)前寫入的數據會被自動歸檔到冷存儲。

取消冷熱分離。

hbase(main):004:0> alter 'hot_cold_table', {NAME=>'f', COLD_BOUNDARY=>""}

為已經存在的表設置冷熱分離,或者修改冷熱分離分界線,單位為秒。

hbase(main):005:0> alter 'hot_cold_table', {NAME=>'f', COLD_BOUNDARY=>'86400'}

查詢冷熱分離是否設置或者修改成功

hbase(main):005:0> desc 'hot_cold_table'

數據寫入

冷熱分離的表與普通表的數據寫入方式完全一致,數據會先存儲在熱存儲(超高IO)中。隨著時間的推移,如果一行數據滿足當前時間-時間列值>COLD_BOUNDARY設置的值條件,則會在執行Compaction時被歸檔到冷存儲(普通IO)中。

插入記錄

執行“put”命令往指定表插入一條記錄,需要指定表的名稱,主鍵,自定義列,以及插入的具體值。

hbase(main):004:0> put 'hot_cold_table','row1','cf:a','value1'

參數說明:

hot_cold_table:表的名稱。

row1:主鍵。

cf:a:自定義的列。

value1:插入的值。

數據查詢

由於冷熱數據都在同一張表中,因此用戶所有的查詢操作都只需在一張表內進行。在查詢時,建議通過配置TimeRange來指定查詢的時間範圍,系統將會根據指定的時間範圍決定查詢模式,即僅查詢熱存儲、僅查詢冷存儲或同時查詢冷存儲和熱存儲。如果查詢時未限定時間範圍,則會導致查詢冷數據。在這種情況下,查詢吞吐量會受到冷存儲的限制。

隨機查詢

不指定HOT_ONLY參數來查詢數據。在這種情況下,將會查詢冷存儲中的數據。

hbase(main):001:0> get 'hot_cold_table', 'row1'

通過指定HOT_ONLY參數來查詢數據。在這種情況下,只會查詢熱存儲中的數據。

hbase(main):002:0> get 'hot_cold_table', 'row1', {HOT_ONLY=>true}

通過指定TimeRange參數來查詢數據。在這種情況下,CloudTable將會比較TimeRange和冷熱邊界值,以確定是只查詢熱存儲還是冷存儲中的數據,還是同時查詢熱冷存儲中的數據

hbase(main):003:0> get 'hot_cold_table', 'row1', {TIMERANGE => [0, 1568203111265]}

範圍查詢

不指定HOT_ONLY參數來查詢數據。在這種情況下,將會查詢冷存儲中的數據。

hbase(main):001:0> scan 'hot_cold_table', {STARTROW =>'row1', STOPROW=>'row9'}

通過指定HOT_ONLY參數來查詢數據。在這種情況下,只會查詢熱存儲中的數據。

hbase(main):002:0> scan 'hot_cold_table', {STARTROW =>'row1', STOPROW=>'row9', HOT_ONLY=>true}

通過指定TimeRange參數來查詢數據。在這種情況下,CloudTable將會比較TimeRange和冷熱邊界值,以確定是只查詢熱存儲還是冷存儲中的數據,還是同時查詢熱冷存儲中的數據。

hbase(main):003:0> scan 'hot_cold_table', {STARTROW =>'row1', STOPROW=>'row9', TIMERANGE => [0, 1568203111265]}

數據合併

  • 合併表所有分區的熱數據區。

    hbase(main):002:0> major_compact 'hot_cold_table', nil, 'NORMAL', 'HOT'

  • 合併表所有分區的冷數據區。

    hbase(main):002:0> major_compact 'hot_cold_table', nil, 'NORMAL', 'COLD'

  • 合併表所有分區的熱冷數據區。

    hbase(main):002:0> major_compact 'hot_cold_table', nil, 'NORMAL', 'ALL'

HBase 冷熱分離效果

cke_1565.png

點擊關註,第一時間瞭解華為雲新鮮技術~

 


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

-Advertisement-
Play Games
更多相關文章
  • Go指針為程式員提供了對記憶體的深入管理能力,同時確保了代碼的安全性。本文深入探討了Go指針的基礎概念、操作、深層理解及其特性與限制。通過深入瞭解其設計哲學和應用,我們可以更好地利用Go的強大功能。 關註公眾號【TechLeadCloud】,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯 ...
  • 第1天安裝並初體驗了一把Dart程式,本文按照Dart官網的“代碼實驗室”把Dart的基礎語法練習一遍,基礎語法特性很多,因此建議收藏本博客了 [本博客疑問:為什麼函數有了命名參數,還需要可選的位置參數?歡迎評論區討論!]…… ...
  • 問題: 上一篇async/await 致WPF卡死問題(https://www.cnblogs.com/stephen2023/p/17725159.html),介紹主線程阻塞,async/await導致卡死問題,同樣的代碼在console下卻並不會出現卡死。 static Stopwatch sw ...
  • C#讀寫INI文件 .NET程式中,可以作為配置文件使用的格式又很多,INI文件在某些場景應用較為廣泛,如串口參數、一些工作站本地參數等等,INI文件主要用途為讀取指定節點的配置內容,以及修改指定節點。一下文章主要描述在程式對INI文件的操作。 INI文件介紹 INI文件 ini文件本質上就是一個擴 ...
  • Biwen.QuickApi 項目介紹 [QuickApi("hello/world")] public class MyApi : BaseQuickApi<Req,Rsp>{} 提供一種簡單集成的Minimal Web Api交互模塊 遵循了 REPR 設計 (Request-Endpoint- ...
  • 重點:find 、ps 、grep 、管道 1、du 指令 作用:du表示directory used,顯示出目錄所占的磁碟空間大小的情況。 語法:#du -sh 目錄路徑 選項說明: -s:表示sumary,彙總統計 -h:表示以較高可讀性的形式顯示 案例:使用du指令統計出“/home”的大小情 ...
  • 作者 | 李晨 編輯 | Debra Chen Gartner最近對全球2,500名高管進行的一項調查發現,近一半(45%)的人表示,ChatGPT的宣傳促使他們增加人工智慧(AI)投資。調查報告稱,70%的高管表示他們正在調查人工智慧的使用,而19%的高管正在試點或已經在生產中部署人工智慧。 Ga ...
  • MySQL 索引、事務與存儲引擎 MySQL 索引 1.索引的概念 ●索引是一個排序的列表,在這個列表中存儲著索引的值和包含這個值的數據所在行的物理地址(類似於C語言的鏈表通過指針指向數據記錄的記憶體地址)。 ●使用索引後可以不用掃描全表來定位某行的數據,而是先通過索引表找到該行數據對應的物理地址然後 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...