高頻面試之12 HBase

12 HBase

文章目錄

  • 12 HBase
    • 12.1 HBase存儲結構
    • 12.2 HBase的寫流程
    • 12.3 HBase的讀流程
    • 12.6 HBase的合并
    • 12.7 RowKey設計原則
    • 12.8 RowKey如何設計
    • 12.9 HBase二級索引原理

12.1 HBase存儲結構

在這里插入圖片描述
架構角色:
1)Master
實現類為HMaster,負責監控集群中所有的 RegionServer 實例。主要作用如下:
(1)管理元數據表格hbase:meta,接收用戶對表格創建修改刪除的命令并執行
(2)監控region是否需要進行負載均衡,故障轉移和region的拆分。
通過啟動多個后臺線程監控實現上述功能:
①LoadBalancer負載均衡器
周期性監控region分布在regionServer上面是否均衡,由參數hbase.balancer.period控制周期時間,默認5分鐘。
②CatalogJanitor元數據管理器
定期檢查和清理HBase:meta中的數據。meta表內容在進階中介紹。
③MasterProcWAL Master預寫日志處理器
把Master需要執行的任務記錄到預寫日志WAL中,如果Master宕機,讓backupMaster讀取日志繼續干。
2)Region Server
Region Server實現類為HRegionServer,主要作用如下:
(1)負責數據cell的處理,例如寫入數據put,查詢數據get等
(2)拆分合并Region的實際執行者,有Master監控,有regionServer執行。
3)Zookeeper
HBase通過Zookeeper來做Master的高可用、記錄RegionServer的部署信息、并且存儲有meta表的位置信息。
HBase對于數據的讀寫操作時直接訪問Zookeeper的,在2.3版本推出Master Registry模式,客戶端可以直接訪問Master。使用此功能,會加大對Master的壓力,減輕對Zookeeper的壓力。
4)HDFS
HDFS為HBase提供最終的底層數據存儲服務,同時為HBase提供高容錯的支持。

12.2 HBase的寫流程

在這里插入圖片描述
寫流程:
寫流程順序正如API編寫順序,首先創建HBase的重量級連接
(1)讀取本地緩存中的Meta表信息;(第一次啟動客戶端為空)
(2)向ZK發起讀取Meta表所在位置的請求;
(3)ZK正常返回Meta表所在位置;
(4)向Meta表所在位置的RegionServer發起請求讀取Meta表信息;
(5)讀取到Meta表信息并將其緩存在本地;
(6)向待寫入表發起寫數據請求;
(7)先寫WAL,再寫MemStore,并向客戶端返回寫入數據成功。

12.3 HBase的讀流程

在這里插入圖片描述
創建連接同寫流程。
(1)讀取本地緩存中的Meta表信息;(第一次啟動客戶端為空)
(2)向ZK發起讀取Meta表所在位置的請求;
(3)ZK正常返回Meta表所在位置;
(4)向Meta表所在位置的RegionServer發起請求讀取Meta表信息;
(5)讀取到Meta表信息并將其緩存在本地;
(6)MemStore、StoreFile、BlockCache
同時構建MemStore與StoreFile的掃描器,
MemStore:正常讀
StoreFile:
根據索引確定待讀取文件;
再根據BlockCache確定讀取文件;
(7)合并多個位置讀取到的數據,給用戶返回最大版本的數據,如果最大版本數據為刪除標記,則不給不返回任何數據。

12.6 HBase的合并

Compaction分為兩種,分別是Minor Compaction和Major Compaction。

12.7 RowKey設計原則

(1)rowkey長度原則
(2)rowkey散列原則
(3)rowkey唯一原則

12.8 RowKey如何設計

1)使用場景:
大量用戶信息保存在HBase中。
2)熱點問題:
由于用戶的id是連續的,批量導入用戶數據后,很有可能用戶信息都集中在同一個region中。如果用戶信息頻繁訪問,很有可能該region的節點成為熱點。
3)期望: 通過對Rowkey的設計,使用戶數據能夠分散到多個region中。
4)步驟:
(1)預分區
通過命令

create     'GMALL:DIM_USER_INFO','INFO',SPLITS=>['20','40','60','80']

把用戶信息表(GMALL:DIM_USER_INFO) 分為5個region : [00-20), [20-40), [40-60), [60-80), [80-99]
(2)寫入時反轉ID
把用戶ID左補零10位(根據最大用戶數),然后反轉順序。
比如:用戶id為1457,反轉處理后變為7541000000; 根據前兩位分到region [60-80),
用戶id為1459,反轉處理后變為9541000000;根據前兩位分到 region [80-99]
這樣連續的用戶ID反轉后由于Rowkey開頭并不連續,會進入不同的region中。
最終達到的效果可以通過Web UI進行觀察:
在這里插入圖片描述
如上圖,用戶數據會分散到多個分區中。
注意:在用戶查詢時,也同樣根據需要把ID進行反轉后進行查詢。

12.9 HBase二級索引原理

1)原理
協處理器:協助處理數據,可以在向原始表中寫入數據之后向索引表中寫入一條索引數據。
2)種類及用法
(1)全局 讀多寫少
單獨創建表專門用于存儲索引,索引表數據量比原始表小,讀取更快速。但是寫操作會寫兩張表的數據,跨Region,需要多個連接。
(2)本地 寫多讀少
將索引數據與原表放在一起(Region),加在一起比原表數據量大,讀取相對變慢,但是由于在一個Region,所以寫操作兩條數據用的是同一個連接。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85311.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3 + TypeScript + Element Plus 表格實例null檢查方法

代碼分析&#xff1a; // 表格實例對象 const tableRef ref<ElTableExtendedInstance | null>(null); // 表格列配置列表 const columnConfigs ref<IColumnConfig[]>([{ prop: "index", label: "序號", width: 60 },{ prop: "batchNo&…

Neo4j常見語法-unwind

unwind的用法&#xff08;UNWIND 是一個強大的操作符&#xff0c;用于將集合&#xff08;列表、數組&#xff09;展開為多行數據。它類似于關系型數據庫中的 UNNEST 或 LATERAL JOIN&#xff0c;是 Cypher 查詢中處理集合數據的核心工具&#xff09; &#xff08;1&#xff09;…

JavaEE-Spring-IoCDI

Spring是?個開源框架, 他讓我們的開發更加簡單. 他?持?泛的應?場 景, 有著活躍?龐?的社區, 這也是Spring能夠?久不衰的原因. 但是這個概念相對來說, 還是?較抽象. ??句更具體的話來概括Spring, 那就是: Spring 是包含了眾多?具?法的 IoC 容器 容器是?來容納…

CppCon 2017 學習:10 Core Guidelines You Need to Start Using Now

C.45: 不要定義一個僅僅初始化成員變量的默認構造函數&#xff0c;而是使用類內成員初始化器 如果你有一個默認構造函數&#xff0c;它的唯一作用是給成員變量賦默認值&#xff08;如 1、2、3&#xff09;&#xff0c;這更清晰、簡單的方法是直接在成員變量聲明時使用類內初始…

Java并發編程實戰 Day 28:虛擬線程與Project Loom

【Java并發編程實戰 Day 28】虛擬線程與Project Loom 文章內容 在“Java并發編程實戰”系列的第28天&#xff0c;我們將聚焦于**虛擬線程&#xff08;Virtual Threads&#xff09;**和 Project Loom&#xff0c;這是 Java 在高并發場景下的一次重大革新。隨著現代應用對性能和…

Linux系統移植⑦:uboot啟動流程詳解-board_init_r執行過程

Linux系統移植⑦&#xff1a;uboot啟動流程詳解-board_init_r執行過程 在uboot中&#xff0c;board_init_r 是啟動流程中的一個關鍵函數&#xff0c;負責完成板級&#xff08;board-specific&#xff09;的后期初始化工作。以下是關于該函數的詳細說明&#xff1a; 1. 函數作…

OpenStack入門體驗

1.1云計算概述 相信大家都聽到很多的阿里云、騰訊云、百度云等等這些詞,那到底什么是云計算?云 計算又能做什么? 1.1.1什么是云計算 云計算(cloud computing)是一種基于網絡的超級計算模式,基于用戶的不同需求,提供所需的資源,包括計算資源、存儲資源、網絡資源等。云計算…

RK 安卓10/11平臺 HDMI-IN 調試

這篇文章我們介紹一下在安卓9、10、11的版本上&#xff0c;rk平臺的hdmi-in功能是如何實現的&#xff0c;下篇文章我們再介紹安卓12之后的版本有了什么變化。希望對在rk平臺調試hdmi-in功能的朋友有一些幫助。 目錄 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;…

MongoDB學習記錄(快速入門)

MongoDB核心 基礎概念 數據庫 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。在內存中運行的&#xff0c;一旦程序運行結束或者計算機斷電&#xff0c;程序運行中的數據都會丟失。我們需要將一些程序運行的數據持久化到硬盤之中&#xff0c;以確保數據的安全性。數據庫…

阿里一面:微服務拆分需要考慮什么因素?

要拆分微服務&#xff0c;首先我們要了解微服務拆了會有什么問題&#xff1f;怎么合理拆服務&#xff1f; 拆分服務會帶來什么問題&#xff1f; 舉個電商系統下單扣庫存的例子。 對于單體應用&#xff0c;通訊在進程內部進行&#xff0c;下單方法調用扣庫存方法&#xff0c;…

3D高斯潑濺和4D高斯

1.高斯函數 想象你往平靜的湖水里扔一塊石頭&#xff0c;水波會以石頭落點為中心向外擴散&#xff0c;形成一個逐漸衰減的圓形波紋。高斯函數的形狀就和這個波紋類似&#xff1a; 中心最高&#xff08;石頭落點&#xff0c;波峰最強&#xff09;。越往外&#xff0c;高度&…

comfyui插件和comfyui mac安裝

mac comfyui安裝包 ComfyUI.zip&#xff0c;官方最新0.3.40&#xff0c;如果后續官方有迭代&#xff0c;可以直接通過git更新源碼升級 comfyui插件下載&#xff0c;解壓放到custom_nodes目錄下&#xff0c;包含 comfyui-animatediff-evolved&#xff08;視頻插件&#xff09; 和…

面試題SpringCloud

SpringCloud有哪些特征&#xff1f; 分布式/版本化配置服務注冊與發現路由服務到服務的調用負載均衡斷路器領導選舉和集群狀態分布式消息傳遞 SpringCloud核心組件&#xff1f; Eureka 注冊中心Ribbon 客戶端負載均衡Hystrix&#xff1a; 服務容錯處理Feign:聲明式Rest客戶端Zu…

ASR-PRO語音識別可能出現的問題

ASR-PRO語音識別可能出現的問題 4月份有一天刷到牢大/愛麗絲語音自開關燈設備&#xff0c;心血來潮&#xff0c;博主也是淺嘗了一下&#xff0c;由此也總結一下&#xff0c;實現此項目會出現的問題。 在實現愛麗絲開關燈模塊時ASRPRO語音識別可能出現的問題如下&#xff1a; …

蒼穹外賣--緩存菜品Spring Cache

Spring Cache是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單地加一個注解&#xff0c;就能實現緩存功能。 Spring Cache提供了一層抽象&#xff0c;底層可以切換不同的緩存實現&#xff0c;例如&#xff1a; ①EHCache ②Caffeine ③Redis 常用注解…

個人簡歷制作MarkDown模板

MarkDown制作個人簡歷的模板放在了github上&#xff0c;大家如有需求&#xff0c;請自取&#xff1a; https://github.com/QQQQQQBY/ResumeTemplate 介紹一下此模板的特點&#xff1a; &#x1f338;個人面試期間使用的、整理的簡歷格式&#xff0c;現在分享給大家。 ?簡歷采…

【MySQL數據庫 | 第五篇】DDL操作2

文章目錄 當前數據庫student的數據數據表操作 - 修改&刪除&#x1f4d6;修改操作增加字段&#x1f44f;案例&#xff1a;向數據表student中添加字段 id修改字段的數據類型【只能修改字段的屬性】&#x1f44f;案例&#xff1a;將student表中字段age的屬性由tinyint unsigne…

【瀏覽器插件】如何開發一個Chrome瀏覽器插件

這篇文章來介紹一下,如何開發一個自己的Chrome瀏覽器插件程序。 Chrome瀏覽器插件,其實是讓瀏覽器替我們執行我們自己寫的代碼,既然要讓瀏覽器執行代碼,那么首先,就需要定義一個規范,也就是說,需要讓Chrome瀏覽器知道,你寫的程序是一個插件。 這就需要介紹一下插件中…

詳細講解Redis為什么被設計成單線程

Redis 被設計成單線程的原因主要有以下幾點&#xff0c;這些原因涉及性能優化、復雜性控制、數據一致性以及適用場景等多個方面&#xff1a; 1. 簡化設計與實現 避免鎖競爭&#xff1a;多線程環境下&#xff0c;多個線程訪問共享資源時需要加鎖來保證數據一致性。鎖的使用會增…

Hive 邏輯優化器

Optimizer PointLookupOptimizer 作用&#xff1a;把符合條件的 OR 表達式轉為 IN。 參數hive.optimize.point.lookup 設置是否開啟 PointLookupOptimizer&#xff0c;默認為 true. 參數 hive.optimize.point.lookup.min 控制多少個 OR 表達式轉為 IN&#xff0c;默認 31。 例…