HBase高級特性(布隆過濾器和協處理器)、列族設計、rowkey設計以及熱點問題處理

在闡述HBase高級特性和熱點問題處理前,首先回顧一下HBase的特點:分布式、列存儲、支持實時讀寫、存儲的數據類型都是字節數組byte[],主要用來處理結構化和半結構化數據,底層數據存儲基于hdfs。

同時,HBase和傳統數據庫一樣提供了事務的概念,但是HBase的事務是行級事務,可以保證行級數據的原子性、一致性、隔離性以及持久性。

布隆過濾器在HBase中的應用

布隆過濾器(Bloom Filter)是空間利用效率很高的數據結構,利用位數組表示一個集合,判斷一個元素是否屬于該集合。但存在一定的錯誤率,在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合,所以適用于能容忍一定錯誤率的場景下。

布隆過濾器是HBase的高級功能屬性,它能夠降低特定訪問模式下的查詢時間,但是會增加內存和存儲的負擔,是一種以空間換時間的典型應用,默認為關閉狀態。

可以單獨為每個列族單獨啟用布隆過濾器,可以在建表時直接指定,也可以通過使用HColumnDescriptor.setBloomFilterType對某個列族指定布隆過濾器。

目前HBase支持以下3種布隆過濾器類型:
NONE:不使用布隆過濾器(默認)
ROW:行鍵使用布隆過濾器過濾
ROWCOL;列鍵(row key + column family + qualifier)使用布隆過濾器過濾

下圖展示了何種情況下使用布隆過濾器,一般建議使用ROW模式,它在額外的存儲空間開銷和利用選擇過濾存儲文件提升性能方面做了很好的權衡,具體使用哪一種,要看具體的使用場景:在這里插入圖片描述

協處理器

HBase協處理器目前分為兩種observer和endpoint,二者可以結合使用,都是運行在HBase服務端的。
1.observer

與RDBMS的觸發器類似,運行客戶端在操作HBase集群數據過程中,通過鉤子函數在特定的事件(包括一些用戶產生和服務期內部自動產生的事件)發生時做一些預處理(如插入之前做一些業務處理)和后處理(如插入之后做出響應等)的操作。

observer提供的幾個典型的接口:

RegionObserver:處理數據修改事件。典型的應用場景就是用作處理HBase二級索引,如在put前在針對處理的數據生成二級索引,處理引擎可以通過MapReduce做,也可以將生成的二級索引存儲在solr或者es中MasterObserver:管理或DDL類型的操作,針對集群級的事件WALObserver:提供針對WAL的鉤子函數

2.endpoint

類似于RDBMS中的存儲過程,可以通過添加一些遠程過程調用來動態擴展RPC協議。允許擴展集群的能力,對客戶端應用自定義開發新的運算命令,用戶代碼可以被部署到服務端

列族設計

一個列族在數據底層是一個文件,所以將經常一起查詢的列放到一個列族中,同時盡可能創建較少數量的列族,且不要頻繁修改,這樣可以減少文件的IO、尋址時間,從而提高性能。

row key設計

HBase中rowkey可以唯一標識一行數據,在HBase查詢的時候,主要以下兩種方式:
get:指定rowkey獲取唯一一條記錄
scan:設置startRow和stopRow參數進行范圍匹配

在設計row key時,首先要保證row key唯一,其次要考慮以下幾個方面:

1. 位置相關性

存儲時,數據按照row key的字典順序排序存儲。設計row key時,要充分考慮排序存儲這個特性,將經常一起讀取的行存儲放到一起。

2. row key長度

row key是一個二進制碼流,可以是任意字符串,最大長度 64kb ,一般為10-100bytes,原因如下:

1)HBase數據的持久化文件hfile是按照Key Value存儲的,如果row key過長,當存儲的數量很大時,僅row key就會占據很大空間,會極大影響hfile存儲效率

2)row key設計過長,memstore緩存到內存的數據就會相對減少,檢索效率低

3. row key散列性

row key是按照字典順序存儲的,如果row key按照遞增或者時間戳遞增生成,那么數據可能集中存儲在某幾臺甚至某一臺region server上,導致某些region server的負載非常高,影響查詢效率,嚴重了可能導致region server宕機。

因此,可以將row key的一部分由程序生成散列數字,將row key打散,均勻分布在HBase集群中的region server上,具體分為以下幾種處理方式:

1)反轉
通過反轉固定長度或數字格式的row key,將row key中經常變化的部分(即相對比較隨機的部分)放在前面,這種方式的弊端就是失去了rowkey的有序性。

最常用的就是,用戶的訂單數據存儲在HBase中,利用手機號后4位通常是隨機的的特性,以用戶的手機號反轉再根據業務場景加上一些其他數據拼成row key或者是僅僅使用反轉后的手機號作為row key,從而避免以手機號固定開頭導致的熱點問題。

2)加鹽
并非密碼學中的加鹽,而是通過在row key加隨機數前綴,前綴種類數應和你想使數據分散到不同的region的數量保持一致。

3)哈希散列方式
利用一些哈希算法如MD5,生成哈希散列值作為row key的前綴,確保region所管理的start-end rowkeys范圍盡可能隨機。

HBase熱點問題及處理

HBase中熱點問題其實就是數據傾斜問題,由于數據的分配不均勻,如row key設計的不合理導致數據過多集中于某一個或某幾個region server上,會導致這些region server的訪問壓力,造成性能下降甚至不能夠提供對外服務。

還有就是,在默認一個region的情況下,如果寫操作比較頻繁,數據增長太快,region 分裂的次數會增多,比較消耗資源。

主要通過兩種方式相結合,row key設計(具體參考上文)和預分區。

這里主要說一下預分區,一般兩種方式:

建表時,指定分區方式。
如create ‘t1’, ‘f1’, SPLITS => [‘10’, ‘20’, ‘30’, ‘40’]通過程序生成splitKeys,程序中建表時指定splitKeys

但這兩種方式也并非一勞永逸,因為數據是不斷地增長的,已經劃分好的分區可能承載不了更多的數據,就需要進一步split,但隨之帶來的是性能損耗。所以我們還要規劃好數據增長速率,定期觀察維護數據,根據實際業務場景分析是否要進一步分區,或者極端情況下,可能要重建表做更大的預分區然后進行數據遷移。

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

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

相關文章

redis sentinel 與 clauster 的區別

Redis Sentinel(哨兵)和Redis Cluster(集群)是Redis提供的兩種不同的高可用和擴展性解決方案,它們的設計目標和適用場景有顯著區別: 1. 核心功能與目標 Redis Sentinel 主要解決主從架構的高可用問題,實現自動故障轉移 監控主從節點狀態,當主節點故障時自動將從節點提…

MySQL數據庫中快速導入大數據sql

1.PwerShell命令頁面導入全表數據庫 -P3310 指定數據庫端口號Get-Content "本地sql文件目錄" | .\mysql -u root -p -P 33102.PwerShell命令頁面導入單表到數據庫 -P3310 指定數據庫端口號Get-Content "本地sql文件目錄" | .\mysql -u root -p -P 3310 數…

消息類型proto的編寫和生成

消息類型proto的編寫和生成 代碼如下: syntax"proto3"; package xypmq;enum ExchangeType {UNKNOWNTYPE0;DIRECT1;FANOUT2;TOPIC3; };enum DeliveryMode {UNKNOWNMODE0;UNDURABLE1;DURABLE2; };message BasicProperties {string id1;DeliveryMode deliver…

Vuetify:構建優雅Vue應用的Material Design組件庫

Vuetify是一個基于Material Design設計規范的Vue.js UI組件庫&#xff0c;它提供了80多個精心設計的組件&#xff0c;幫助開發者快速構建美觀且功能豐富的企業級應用。核心特性1. 完整的Material Design實現// 所有組件遵循Material Design規范 <v-btn color"primary&q…

SpringBoot 注解深剖:@RequestParam 與 @RequestBody 的終極對決,90% 的開發者都踩過這些坑!

在 SpringBoot 開發中&#xff0c;處理 HTTP 請求參數是我們每天都要面對的工作。而RequestParam和RequestBody這兩個注解&#xff0c;就像是我們手中的兩把利劍&#xff0c;既能高效解決問題&#xff0c;用不好也可能 "誤傷" 自己。作為一名資深 Java 開發者&#x…

【Docker】P2 Docker環境構建準備:MacOS 與 Linux

目錄操作系統與 Docker 的兼容性分析Docker 技術本質MacOS 環境下的 Docker 構建1. 安裝前準備2. Docker Desktop安裝3. 鏡像加速配置高級操作&#xff1a;文件共享配置Linux 環境下的 Docker 構建卸載歷史版本配置軟件源Docker 核心組件安裝系統服務配置鏡像加速器配置應用配置…

OpenCV 發票識別全流程:透視變換與輪廓檢測詳解

目錄 前言 一、核心技術原理&#xff1a;透視變換與輪廓檢測 1. 透視變換&#xff1a;讓傾斜發票 “正過來” &#xff08;1&#xff09;什么是透視變換&#xff1f; &#xff08;2&#xff09;透視變換的 5 個關鍵步驟 2. 輪廓檢測&#xff1a;精準定位發票區域 &#x…

并發:使用volatile和不可變性實現線程安全

《Java并發編程實戰》中的VolatileCachedFactorizer展示了如何使用volatile和不可變性來實現線程安全。解決了簡單緩存實現中可能出現的線程安全問題&#xff0c;同時避免了全量同步帶來的性能開銷。 場景背景 假設有一個服務&#xff08;如因數分解服務&#xff09;&#xff0…

Linux x86 stability和coredump

1 POSIX pthread_create原理 1&#xff09;fork()、pthread_create()、vfork()對應的系統調用分別是sys_fork()、sys_clone()、sys_vfork()&#xff0c;它們在內核中都是通過do_fork()實現的。 2&#xff09;系統中所有的進程都組織在init_task.tasks鏈表下面&#xff0c;每個進…

【PyTorch】多對象分割

對象分割任務的目標是找到圖像中目標對象的邊界。實際應用例如自動駕駛汽車和醫學成像分析。這里將使用PyTorch開發一個深度學習模型來完成多對象分割任務。多對象分割的主要目標是自動勾勒出圖像中多個目標對象的邊界。 對象的邊界通常由與圖像大小相同的分割掩碼定義&#xf…

RabbitMQ---面試題

總結我們所學內容&#xff0c;這里推薦博客進行復習 RabbitMQ---面試題_rabbitmq常問面試題-CSDN博客

MasterGo自動布局(Auto Layout)

自動布局是用來表示 子元素與子元素之間互相影響的一種排版方式,是一種響應式布局技術。一般是將所有元素設計完成后再使用自動布局進行設置。 自動布局就是響應式布局,就是在不同尺寸的手機上寬度不同都應該怎么展示。 一般頁面的一級元素使用約束進行相對定位,二級元素及里…

還在重啟應用改 Topic?Spring Boot 動態 Kafka 消費的“終極形態”

場景描述&#xff1a; 你的一個微服務正在穩定地消費 Kafka 的 order_topic。現在&#xff0c;上游系統為了做業務隔離&#xff0c;新增加了一個 order_topic_vip&#xff0c;并開始向其中投遞 VIP 用戶的訂單。你需要在不重啟、不發布新版本的情況下&#xff0c;讓你現有的消費…

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型 系統環境準備 由于使用的基于 nvcr.io/nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 的 workbench,需要進行以下準備(其他系統環境可忽略) ldconfig -p | grep libcudnn 找到 libcudnn 的so庫,然…

Coze源碼分析-資源庫-創建知識庫-前端源碼-核心組件

概述 本文深入分析Coze Studio中用戶創建知識庫功能的前端實現。該功能允許用戶在資源庫中創建、編輯和管理知識庫資源&#xff0c;為開發者提供了強大的知識管理和數據處理能力。通過對源碼的詳細解析&#xff0c;我們將了解從資源庫入口到知識庫配置彈窗的完整架構設計、組件…

基于時空數據的網約車訂單需求預測與調度優化

一、引言隨著共享出行行業的蓬勃發展&#xff0c;網約車已成為城市交通的重要組成部分。如何精準預測訂單需求并優化車輛調度&#xff0c;是提升平臺運營效率、改善用戶體驗的關鍵。本文提出一種基于時空數據的網約車訂單需求預測與調度優化方案&#xff0c;通過網格化城市空間…

數據結構 Java對象的比較

在Java中&#xff0c;凡是涉及到比較的&#xff0c;可以分為兩類情況&#xff1a;一類是基本數據類型的比較&#xff0c;另一類是引用數據類型的比較。對于基本數據類型的比較&#xff0c;我們通過關系運算符&#xff08;、>、<、!、>、<&#xff09;進行它們之間的…

企智匯建筑施工項目管理系統:全周期數字化管控,賦能工程企業降本增效!?建筑工程項目管理軟件!建筑工程項目管理系統!建筑項目管理軟件企智匯軟件

在建筑施工行業&#xff0c;項目進度滯后、成本超支、質量安全隱患頻發、多方協同不暢等問題&#xff0c;一直是制約企業發展的痛點。傳統依賴人工記錄、Excel 統計的管理模式&#xff0c;不僅效率低下&#xff0c;更易因信息斷層導致決策失誤。企智匯建筑施工項目管理系統憑借…

k8s-臨時容器學習

臨時容器學習1. 什么是臨時容器2. 實驗1. 什么是臨時容器 在官網&#xff1a;https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ephemeral-containers/ 中有介紹 臨時容器是用于調試Pod中崩潰的容器或者不具備調試工具&#xff0c;比如在一個運行著業務的容器中&am…

Python 2025:低代碼開發與自動化運維的新紀元

從智能運維到無代碼應用&#xff0c;Python正在重新定義企業級應用開發范式在2025年的企業技術棧中&#xff0c;Python已經從一個"開發工具"演變為業務自動化的核心平臺。根據Gartner 2025年度報告&#xff0c;68%的企業在自動化項目中使用Python作為主要開發語言&am…