大數據面試問答-HBase/ClickHouse

1. HBase

1.1 概念

HBase是構建在Hadoop HDFS之上的分布式NoSQL數據庫,采用列式存儲模型,支持海量數據的實時讀寫和隨機訪問。適用于高吞吐、低延遲的場景,如實時日志處理、在線交易等。

RowKey(行鍵)
定義:表中每行數據的唯一標識,類似于關系數據庫的主鍵。
特點:數據按 RowKey 的字典序全局排序。
所有查詢必須基于 RowKey 或范圍掃描(Scan)。
示例:user_123_order_1001(用戶ID + 訂單ID)。

Region(區域)
定義:HBase 表的水平分片,每個 Region 存儲一段連續的 RowKey 范圍。
特點:一個表初始只有一個 Region,隨著數據增長自動分裂(如達到 10GB 閾值)。
每個 Region 由一個 RegionServer 管理。
示例:Region 1 存儲 [A-M] 的 RowKey,Region 2 存儲 [N-Z]

Column Family(列族)
定義:列的邏輯分組,每個列族對應獨立的物理存儲單元(HFile)。
特點:列族需預先定義,但列(Qualifier)可動態添加。
同一列族的數據存儲在一起,優化讀取效率。
示例:定義 OrderInfo ProductDetails 兩個列族。

1.2 組件

HMaster
角色:集群的管理者,負責元數據操作和協調。
職責:管理表的創建、刪除、修改(如列族定義)。
分配 Region 到 RegionServer,并在節點故障時重新分配。
監控所有 RegionServer 的狀態(通過 ZooKeeper)。
注意:HMaster 本身不直接處理讀寫請求,因此 HBase 的高可用性依賴多 HMaster 實例。

RegionServer
角色:數據存儲和讀寫請求的實際處理者。
職責:管理多個 Region(每個 Region 對應表的一部分數據)。
處理客戶端的讀寫請求(如 Put、Get、Scan)。
管理 MemStore(內存緩存)和 HFile(磁盤文件)。
定期執行數據刷寫(Flush)和合并(Compaction)。

ZooKeeper
角色:分布式協調服務,維護集群狀態和元數據。
職責:管理 HMaster 的選舉(避免單點故障)。
監控 RegionServer 的存活狀態(通過心跳機制)。
存儲 HBase 的元數據(如 hbase:meta 表的位置)。

HDFS
角色:HBase 的底層存儲系統。
職責:持久化存儲 HFile 數據(每個 HFile 對應一個列族)。
通過多副本機制保障數據可靠性。

1.3 計算流程

寫入流程

通過ZooKeeper
客戶端發起寫入請求
查詢hbase:meta表
定位目標RegionServer
寫入WAL-預寫日志
寫入MemStore-內存緩存
MemStore是否達到閾值?
刷寫為HFile-HDFS存儲
寫入完成

讀取流程

通過ZooKeeper
客戶端發起Get/Scan請求
查詢hbase:meta表
定位目標RegionServer
檢查Block Cache-讀緩存
數據是否在緩存中?
直接返回數據
從MemStore和HFile合并讀取
使用Bloom Filter過濾HFile
返回結果

1.4 列族存儲與行鍵的協同關系

物理分離,邏輯聚合:每個列族對應獨立的 HFile 文件,但同一行鍵下的不同列族數據通過行鍵關聯。
假設表結構如下:

RowKey列族:Info列族:Order
user_123name: Aliceorder_2023: 手機
user_456name: Boborder_2023: 電腦

列族 Info Order 的數據存儲在不同的 HFile 中。
當查詢 user_123 Info.nameOrder.order_2023 時,HBase 會通過行鍵 user_123 定位到對應的 Region,再分別從 Info Order 的 HFile 中讀取數據。

1.5 行鍵設計的核心原則

將高頻查詢條件作為前綴
示例:若按用戶查詢為主,行鍵設計為 用戶ID_時間戳。
若按時間范圍查詢為主,行鍵設計為 反轉時間戳_用戶ID(避免熱點)。

避免熱點問題
錯誤設計:單調遞增的行鍵(如 timestamp),導致新數據集中寫入單個 Region。
改進方案:添加哈希前綴(如 MD5(userID)[0:4]_userID)。
反轉時間戳(如 Long.MAX_VALUE - timestamp)。

控制行鍵長度
行鍵會冗余存儲在每個單元格(Cell)中,過長會浪費存儲和內存。

場景1:高效讀取(合理行鍵設計)
需求:查詢用戶 user_123 的姓名(列族 Info,列 name)。
行鍵設計:用戶ID(如 user_123)。
流程:通過行鍵 user_123 直接定位到對應的 Region。
在該 Region 的 Info 列族 HFile 中讀取 name 列的值。
耗時:毫秒級。

場景2:低效讀取(無行鍵條件)
需求:查詢所有用戶的 name 列。
問題:未指定行鍵,需全表掃描。
流程:掃描所有 Region。
遍歷每個 Region 的 Info 列族 HFile。
耗時:分鐘級到小時級。

1.6 HBase適合實時的原因

寫得快:LSM 樹(Log-Structured Merge Tree)架構
寫入優化:數據先寫入內存(MemStore),再異步刷寫到磁盤(HFile),避免傳統數據庫的直接磁盤隨機寫入。
內存寫入速度極快(微秒級),適合高吞吐的實時寫入(如每秒百萬級寫入)。
合并機制:定期將多個小 HFile 合并為大文件(Compaction),平衡讀寫性能,避免碎片化導致的讀取延遲。
寫方面,與HIVE對比

數據庫寫入機制速度特點
HBase- 數據先寫入內存(MemStore),異步刷寫到磁盤(HFile)。- 基于LSM樹優化寫入。高速寫入:支持高吞吐(每秒百萬級寫入),延遲在毫秒級,適合實時寫入場景。
Hive- 數據寫入本質是向HDFS追加文件(如TextFile、ORC、Parquet)。- 需要格式轉換。低速寫入:涉及文件格式轉換和分布式寫入,延遲在分鐘級,適合批量加載。

讀得快:基于 RowKey 的快速隨機訪問
行鍵索引:所有數據按 RowKey 全局排序,配合 Bloom Filter 快速判斷數據是否存在,減少磁盤掃描。
直接定位 Region:通過 RowKey 快速定位數據所在的 Region,避免全表掃描(例如 Get 操作時間復雜度接近 O(1))。
讀方面,與HIVE對比

數據庫寫入機制速度特點
HBase- 通過RowKey直接定位Region,利用MemStore和Block Cache加速讀取。- 支持隨機讀。低延遲讀取:單行查詢為毫秒級,范圍掃描(Scan)性能取決于數據量和RowKey設計。
Hive- 通過MapReduce/Tez/Spark執行全表掃描或復雜查詢。- 需解析文件格式(如ORC)。高延遲讀取:復雜查詢通常需要分鐘到小時級,適合離線批處理分析。

2. ClickHouse

2.1 概念

ClickHouse 是一款開源的列式聯機分析處理(OLAP)數據庫,專為大規模數據分析和高速查詢設計。

2.2 特點

列式存儲與數據壓縮
列式存儲:數據按列存儲,相同數據類型連續存放,大幅提升壓縮率(如數值列壓縮率可達90%以上)。
高效壓縮算法:支持LZ4、ZSTD等算法,減少磁盤I/O和存儲成本。

向量化查詢執行引擎
利用CPU SIMD指令(單指令多數據),一次處理多行數據,提升批量計算效率。
例如:計算1億行數據的SUM,傳統逐行處理需1億次操作,向量化引擎可能僅需數百萬次操作。

分布式架構與并行計算
分片(Sharding):數據水平拆分到多臺節點,支持橫向擴展。
副本(Replication):通過ZooKeeper實現多副本容災(最終一致性)。

分布式查詢:查詢自動路由到相關分片,結果聚合后返回。
實時數據插入與批量導入
高吞吐寫入:支持每秒百萬級數據插入(適合日志、事件流)。
批量導入:通過INSERT SELECT、文件導入(如Parquet)快速加載數據。

2.3 橫向對比

維度ClickHouseHBaseHive
存儲模型列式存儲(針對分析優化)列族存儲(半結構化數據)行式/列式(依賴文件格式,如ORC)
查詢延遲毫秒到秒級(OLAP場景)毫秒級(單行查詢)分鐘到小時級(批處理)
寫入吞吐高吞吐批量寫入(適合日志流)高吞吐實時寫入(適合事務日志)低吞吐批量加載(ETL流程)
數據更新支持批量更新(異步合并)支持單行實時更新僅支持覆蓋或分區更新
典型場景實時分析、寬表聚合、時序數據實時讀寫、在線查詢離線數據倉庫、復雜ETL
SQL支持完整SQL語法(兼容ANSI SQL)無原生SQL,需API或Phoenix擴展類SQL(HiveQL),支持復雜查詢

與 HBase 和 Hive 的協作模式:
HBase:作為實時數據接入層,處理高并發寫入和單行查詢。
ClickHouse:作為實時分析層,承載復雜聚合和即席查詢。
Hive:作為離線數據倉庫,處理歷史數據批量計算。

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

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

相關文章

動態渲染組件

React框架,JSX語法 今天遇到一個好玩的 常規的搜索列表,列表最后一列為操作列,刪改查。 眼看著Table 操作列 的配置文件越來越復雜,決定把操作列單獨寫一個組件,代碼瞬間靚仔了些 {title: Operation,dataIndex: oper…

Web APIs階段

一、Web APIs和JS基礎關聯性 1.1JS的組成 1.2JS基礎階段以及Web APIs階段 JS基礎階段:學習的是ECMAScript標準規定的基礎語法 Web APIs階段: Web APIs是W3C組織的標準Web APIs我們主要學習DOM和BOMWeb APIs是JS獨有的部分主要學習頁面交互功能需要使用…

Doip功能尋址走UDP協議

目前使用 connect()函數的UDP客戶端 ,這里接收數據 解析的地方 查看一下。 如果使用 bind()、sendto()、recvfrom() 組合 那么返回值 和發送要在做調整,,根據業務需要后續在調整 其余的 和原來的 邏輯都是一樣的,只是協議變了而已。 if serv…

Linux指令的詳細介紹

前言:🌼🌼 Linux是一款強大且廣泛使用的操作系統,命令行接口(CLI)是與其交互的核心方式。通過Linux指令,用戶可以高效地執行文件管理、系統監控、進程控制等任務。雖然剛接觸時可能感到有些復雜…

Elasticsearch使用記錄

一、配環境 1.docker版本部署es 8.x系列可以關掉ssl(本地測試時),去docker的/usr/share/elasticsearch/config/elasticsearch.yml里面的“xpack.security.enabled:”設置成true就可以 2.window docker部署推薦教程:基于Docker安…

MuJoCo(Multi-Joint Dynamics with Contact)機器人仿真器存在的問題

MuJoCo物理引擎計算接觸力的核心思路,是通過數學優化的方式同時滿足多個物理約束,而不是簡單地為每個碰撞點單獨計算作用力。它的工作流程可以理解為幾個階段的緊密配合。首先,仿真器會快速檢測所有可能發生接觸的物體表面,篩選出…

基礎(項目管理工具:JIRA、禪道)

目錄 JIRA JIRA介紹 JIRA中的優先級(缺陷嚴重程度) JIRA中的解決結果(缺陷的解決結果) JIRA中的問題狀態(缺陷的狀態) 使用JIRA創建缺陷 JIRA的安裝(Windows) JDK22的下載和安…

16.使用豆包將docker-compose的yaml轉為k8s的yaml,安裝各種無狀態服務

文章目錄 docker方式httpbinit-toolslinux-commandmyipreference docker-compose安裝k8s方式 docker方式 httpbin A simple HTTP Request & Response Service https://httpbin.org/ https://github.com/postmanlabs/httpbin https://github.com/mccutchen/go-httpbin do…

Day(22)--網絡編程習題

習題 以下是這些 TCP 通信練習題的 Java 代碼實現及解析: TCP 通信練習 1 - 多發多收 客戶端(Client1.java) java import java.io.IOException; import java.io.OutputStream; import java.net.Socket; ? public class Client1 {public…

20、.NET SDK概述

.NET SDK(Software Development Kit) 是微軟提供的一套開發工具包,用于構建、運行和管理基于 .NET 平臺的應用程序。它包含了一組豐富的工具、庫和運行時環境,支持開發者在多種操作系統(如 Windows、Linux 和 macOS&am…

DELL電腦開機進入自檢界面

疑難解答 - 如何解決開機直接進入BIOS畫面 添加鏈接描述 一、DELL電腦開機自檢提示please run setup program 未設置一天中的時間-請運行安裝程序(Time-of-day not set - please run SETUP program) 配置信息無效-請運行安裝程序(Invalid configuration information - ple…

2025 最新版 Node.js 下載安裝及環境配置詳細教程【保姆級】

2025 最新版 Node.js 下載安裝及環境配置詳細教程【保姆級】 一、下載安裝二、環境配置三、緩存配置、全局配置以及更換國內淘寶鏡像源 一、下載安裝 下載地址:Node.js 官方下載地址 雙擊安裝,點擊 Change 更改安裝位置。我只有一個C盤,這里…

2025年4月通信科技領域周報(4.07-4.13):6G技術加速落地 衛星通信網絡迎來組網高潮

2025年4月通信科技領域周報(4.07-4.13):6G技術加速落地 衛星通信網絡迎來組網高潮 目錄 2025年4月通信科技領域周報(4.07-4.13):6G技術加速落地 衛星通信網絡迎來組網高潮一、本周熱點回顧1. 華為發布全球首…

vxe-table 動態列篩選,以及篩選項動態變化的解決方案記錄

需求場景: table 的列是由接口動態返回的;列的篩選項就是數據的值,比如【姓名】這個字段總共有三個值,那么姓名這一列的篩選項就是這三個值本身;當有一列篩選后,其他列的篩選項也要動態變化。 vxe-table …

UE5游戲分辨率設置和窗口模式

第一種方法: 在項目配置Config文件夾下新建 DefaultGameUserSettings.ini 輸入代碼 [/Script/Engine.GameUserSettings] bUseVSyncFalse ResolutionSizeX1960 ResolutionSizeY1080 LastUserConfirmedResolutionSizeX800 LastUserConfirmedResolutionSizeY600 WindowPosX-1 …

鏈表知識回顧

類型:單鏈表,雙鏈表、循環鏈表 存儲:在內存中不是連續存儲 刪除操作:即讓c的指針指向e即可,無需釋放d,因為java中又內存回收機制 添加節點: 鏈表的構造函數 public class ListNode {// 結點…

詳解與FTP服務器相關操作

目錄 什么是FTP服務器 搭建FTP服務器相關 ?編輯 Unity中與FTP相關的類 上傳文件到FTP服務器 使用FTP服務器上傳文件的關鍵點 開始上傳 從FTP服務器下載文件到客戶端 使用FTP下載文件的關鍵點 開始下載 關于FTP服務器的其他操作 將文件的上傳,下載&…

Day92 | 靈神 | 二叉樹 路徑總和

Day92 | 靈神 | 二叉樹 路徑總和 112.路徑總和 112. 路徑總和 - 力扣(LeetCode) 思路: 1.遞歸函數意義 如果在根節點為t的樹中可以找到長度為target的路徑就返回true,找不到就返回false 2.參數和返回值 bool tra(TreeNode …

探索鴻蒙應用開發:ArkTS應用執行入口揭秘

# 探索鴻蒙應用開發:ArkTS應用執行入口揭秘 在鴻蒙應用開發的領域中,ArkTS作為聲明式開發語言,為開發者們帶來了便捷與高效。對于剛接觸鴻蒙開發的小伙伴來說,搞清楚ArkTS應用程序的執行入口是邁向成功開發的關鍵一步。今天&…

【Web API系列】Web Shared Storage API之WorkletSharedStorage深度解析與實踐指南

前言 在現代Web開發領域,數據存儲與隱私保護的矛盾始終存在。傳統存儲方案如LocalStorage和Cookies面臨著日益嚴格的安全限制,而跨域數據共享的需求卻在持續增長。正是在這樣的背景下,Web Shared Storage API應運而生,其核心組件…