聊一聊 HBase 是如何寫入數據的?

来源:https://www.cnblogs.com/datadance/archive/2022/05/18/16284653.html
-Advertisement-
Play Games

i,大家好,我是大D。今天繼續瞭解下 HBase 是如何寫入數據的,然後再講解一下一個比較經典的面試題。 ...


hi,大家好,我是大D。今天繼續瞭解下 HBase 是如何寫入數據的,然後再講解一下一個比較經典的面試題。

Region Server 定址

  1. HBase Client 訪問 ZooKeeper;
  2. 獲取寫入 Region 所在的位置,即獲取 hbase:meta 表位於哪個 Region Server;
  3. 訪問對應的 Region Server;
  4. 獲取 hbase:meta 表,並查詢出目標數據位於哪個 Region Server 中的哪個 Region 中。並將該 table 的 Region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問;

寫 Hlog

  1. HBase Client 向 Region Server 發送寫 Hlog 請求;
  2. Region Server 會通過順序寫入磁碟的方式,將 Hlog 存儲在 HDFS 上;

寫 MemStore 並返回結果

  1. HBase Client 向 Region Server 發送寫 MemStore 請求;
  2. 只有當寫 Hlog 和寫 MemStore 的請求都成功完成之後,並將反饋給 HBase Client,這時對於整個 HBase Client 寫入流程已經完成。

MemStore 刷盤

HBase 會根據 MemStore 配置的刷盤策略定時將數據刷新到 StoreFile 中,完成數據持久化存儲。

為什麼要把 WAL 載入到 MemStore中,再刷寫成 HFile 呢?

WAL (Write-Ahead-Log) 預寫日誌是 HBase 的 RegionServer 在處理數據插入和刪除過程中用來記錄操作內容的一種日誌。每次Put、Delete等一條記錄時,首先將其數據寫入到 RegionServer 對應的 HLog 文件中去。

而WAL是保存在HDFS上的持久化文件,數據到達 Region 時先寫入 WAL,然後被載入到 MemStore 中。這樣就算Region宕機了,操作沒來得及執行持久化,也可以再重啟的時候從 WAL 載入操作並執行。

那麼,我們從寫入流程中可以看出,數據進入 HFile 之前就已經被持久化到 WAL了,而 WAL 就是在 HDFS 上的,MemStore 是在記憶體中的,增加 MemStore 並不能提高寫入性能,為什麼還要從 WAL 載入到 MemStore中,再刷寫成 HFile 呢?

  • 數據需要順序寫入,但 HDFS 是不支持對數據進行修改的;
  • WAL 的持久化為了保證數據的安全性,是無序的;
  • Memstore在記憶體中維持數據按照row key順序排列,從而順序寫入磁碟;

所以 MemStore 的意義在於維持數據按照RowKey的字典序排列,而不是做一個緩存提高寫入效率。

另外,非常歡迎大家加我VX: Abox_0226 ,備註「進群」,有關大數據技術的問題在群里一起探討。


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

-Advertisement-
Play Games
更多相關文章
  • 管道與重定向的使用 標準輸入的文件描述符為0. 標準輸出的文件描述符為1 錯誤輸出的文件描述符為2 管道 管道:可以讓我們將多條命令連接在一起。 作用:將一個命令的標準輸出重定向給下一個命令,並作為該命令的標準輸入。 (base) [root@localhost ~]# ifconfig ens33 ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 單片機每隔1秒採集一次溫度值(0~40℃),並通過串口輸出(ASCII格式)。 硬體設計 在第一節的基礎上,在P ...
  • ps命令 ps命令來自於英文片語”process status“的縮寫,其功能是用於顯示當前系統的進程狀態。使用ps命令可以查看到進程的所有信息,例如進程的號碼、發起者、系統資源使用占比(處理器與記憶體)、運行狀態等等。幫助我們及時的發現哪些進程出現”僵死“或”不可中斷“等異常情況。 經常會與kill ...
  • 一、概述 在眾多 Hadoop 版本中, CDH(Cloudera Hadoop) 是 Hadoop 眾多分支中比較出色的版本, 它由Cloudera 發行和維護。CDH 基於 Apache 的 Hadoop 進行重新構建,提供了基於 Web 頁面的群集部署和管理操作。Hadoop發行版除了社區的A ...
  • SpringDataRedis的序列化的一些問題 RedisTemplate可以接收任意Object作為值寫入Redis,但是如果不實現設置序列化器的化預設是採用JDK序列化,序列化後的結果可讀性差並且記憶體占用空間大,如下圖。 自定義RedisTemplate的序列化方式 key和 hashKey採 ...
  • 導讀: 今天和大家分享京東零售OLAP平臺的建設和場景的實踐,主要包括四大部分: 管控面建設 優化技巧 典型業務 大促備戰 -- 01 管控面建設 1. 管控面介紹 管控面可以提供高可靠高效可持續運維保障、快速部署小時交付的能力,尤其是針對ClickHouse這種運維較弱但是性能很高的OLAP核心引 ...
  • 本文介紹如何使用 UPDATE 和 DELETE 語句處理表中的數據,還介紹了為什麼 WHERE 子句對 UPDATE 和 DELETE 語句很重要。 一、更新數據 更新(修改)表中的數據,可以使用 UPDATE 語句。有兩種使用 UPDATE 的方式: 更新表中的特定行; 更新表中的所有行。 下麵 ...
  • 本文介紹如何使用 SQL INSERT 語句將數據插入到表中,如何用 INSERT SELECT 從其他表中導入行,如何用 SELECT INTO 將行導出到一個新表。 一、數據插入 毫無疑問,SELECT 是最常用的 SQL 語句了。但是,還有其他 3 個常用的 SQL 語句需要學習。第一個就是 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...