大数据面试问答-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 计算流程
写入流程
读取流程
1.4 列族存储与行键的协同关系
物理分离,逻辑聚合:每个列族对应独立的 HFile 文件,但同一行键下的不同列族数据通过行键关联。
假设表结构如下:
| RowKey | 列族:Info | 列族:Order |
|---|---|---|
| user_123 | name: Alice | order_2023: 手机 |
| user_456 | name: Bob | order_2023: 电脑 |
列族 Info 和 Order 的数据存储在不同的 HFile 中。
当查询 user_123 的 Info.name 和 Order.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 横向对比
| 维度 | ClickHouse | HBase | Hive |
|---|---|---|---|
| 存储模型 | 列式存储(针对分析优化) | 列族存储(半结构化数据) | 行式/列式(依赖文件格式,如ORC) |
| 查询延迟 | 毫秒到秒级(OLAP场景) | 毫秒级(单行查询) | 分钟到小时级(批处理) |
| 写入吞吐 | 高吞吐批量写入(适合日志流) | 高吞吐实时写入(适合事务日志) | 低吞吐批量加载(ETL流程) |
| 数据更新 | 支持批量更新(异步合并) | 支持单行实时更新 | 仅支持覆盖或分区更新 |
| 典型场景 | 实时分析、宽表聚合、时序数据 | 实时读写、在线查询 | 离线数据仓库、复杂ETL |
| SQL支持 | 完整SQL语法(兼容ANSI SQL) | 无原生SQL,需API或Phoenix扩展 | 类SQL(HiveQL),支持复杂查询 |
与 HBase 和 Hive 的协作模式:
HBase:作为实时数据接入层,处理高并发写入和单行查询。
ClickHouse:作为实时分析层,承载复杂聚合和即席查询。
Hive:作为离线数据仓库,处理历史数据批量计算。
相关文章:
大数据面试问答-HBase/ClickHouse
1. HBase 1.1 概念 HBase是构建在Hadoop HDFS之上的分布式NoSQL数据库,采用列式存储模型,支持海量数据的实时读写和随机访问。适用于高吞吐、低延迟的场景,如实时日志处理、在线交易等。 RowKey(行键) 定义…...
SparseDrive---论文阅读
纯视觉下的稀疏场景表示 算法动机&开创性思路 算法动机: 依赖于计算成本高昂的鸟瞰图(BEV)特征表示。预测和规划的设计过于直接,没有充分利用周围代理和自我车辆之间的高阶和双向交互。场景信息是在agent周围提取ÿ…...
数字时代的AI与大数据:用高级AI开发技术革新大数据管理
李升伟 编译 在当今数字时代,数据的爆炸式增长令人惊叹 从社交媒体互动到物联网设备的传感器数据,企业正被海量信息淹没。但如何将这种无序的数据洪流转化为有价值的洞察?答案在于人工智能(AI)开发技术的革新&#x…...
Unchained 内容全面上链,携手 Walrus 迈入去中心化媒体新时代
加密新闻媒体 Unchained — — 业内最受信赖的声音之一 — — 现已选择 Walrus 作为其去中心化存储解决方案,正式将其所有媒体内容(文章、播客和视频)上链存储。Walrus 将替代 Unchained 现有的中心化存储架构,接管其全部历史内容…...
确保连接器后壳高性能互连的完整性
本文探讨了现代后壳技术如何促进高性能互连的电气和机械完整性,以及在规范阶段需要考虑的一些关键因素。 当今的航空航天、国防和医疗应用要求连接器能够提供高速和紧凑的互连,能够承受振动和冲击,并保持对电磁和射频干扰 (EMI/R…...
C++学习Day0:c++简介
目录 一、.C语言的发展史二、C特点三、面向对象的重要术语四、面向过程和面向对象的区别?五、开发环境:六、创建文件步骤:1.点击新建项目2.在弹出的开始栏中按如下操作3.在.pro文件中添加(重要!!࿰…...
从零开始构建 Ollama + MCP 服务器
Model Context Protocol(模型上下文协议)在过去几个月里已经霸占了大家的视野,出现了许多酷炫的集成示例。我坚信它会成为一种标准,因为它正在定义工具与代理或软件与 AI 模型之间如何集成的新方式。 我决定尝试将 Ollama 中的一…...
【bash】.bashrc
查看当前路径文件数量 alias file_num"ls -l | grep ^- | wc -l"查看文件大小 alias file_size"du -sh"alias ll alias ll"ls -ltrh"cd的同时执行ll alias cdcdls; function cdls() {builtin cd "$1" && ll }自定义prompt…...
合成数据如何赋能大模型预训练:效果与效率的双重加速器
目录 合成数据如何赋能大模型预训练:效果与效率的双重加速器 一、预训练模型为何需要合成数据? ✅ 克服真实数据的稀缺与偏倚 ✅ 控制训练内容结构与分布 ✅ 提升学习效率与训练稳定性 二、哪些预训练任务适合用合成数据? 三、如何构建…...
java忽略浅拷贝导致bug
bug源代码 /*** 查询用户列表** param user 用户* param page 页* param size 大小* since 2025/04/14 11:53:25*/PostMapping("/getUser")public IWMSResponse<?> getUser(RequestBody SjUser user, RequestParam(defaultValue "1") Integer pag…...
MATLAB学习笔记(二) 控制工程会用到的
MATLAB中 控制工程会用到的 基础传递函数表达传递函数 零极点式 状态空间表达式 相互转化画响应图线根轨迹Nyquist图和bode图现控部分求约旦判能控能观极点配置和状态观测 基础 传递函数表达 % 拉普拉斯变换 syms t s a f exp(a*t) %e的a次方 l laplace(f) …...
C++ 线程间通信开发从入门到精通实战
C 线程间通信开发从入门到精通实战 在现代软件开发中,多线程程序已成为提升应用性能、实现并行处理的重要手段。随着多核处理器的普及和复杂应用需求的增加,C作为一门高性能的编程语言,在多线程开发中扮演着不可或缺的角色。然而,…...
Vue3 SSR 工程化实践:日常工作中的性能优化与实战技巧
一、流式渲染与分块传输(面向性能的关键优化) 1.1 流式响应基础实现 // Node.js Express 示例(Vite SSR同理)import { renderToWebStream } from vue/server-rendererapp.get(/, async (req, res) > { res.setHeader(Conten…...
Maven工具学习使用(十)——生成项目站点
maven2中站点生成是Maven核心的一部分,Maven3中这部分内容已经移除。maven3必须使用3.x版本的maven-site-plugin,maven2则使用最新的2.x的版本,执行mvn site命令,可以在项目的target/site/目录下找到Maven生成的站点文件。例如dependencies.h…...
Redis原理与Windows环境部署实战指南:助力测试工程师优化Celery调试
引言 在分布式系统测试中,Celery作为异步任务队列常被用于模拟高并发场景。而Redis作为其核心消息代理,其性能和稳定性直接影响测试结果。本文将深入解析Redis的核心原理,主要讲解Windows环境部署redis,为测试工程师提供一套完整…...
Go语言入门到入土——一、安装和Hello World
Go语言入门到精通——安装和Hello World 文章目录 Go语言入门到精通——安装和Hello World下载并安装让Go跑起来为你的代码启动依赖跟踪调用外部包总结 下载并安装 下载地址:https://go.dev/dl/ 下载后傻瓜式安装 查看是否安装完成 go version让Go跑起来 创建一个…...
人类意识本质上是一台自我欺骗的机器
要触达“大彻大悟”的终极内核,必须突破语言、逻辑甚至“觉醒”概念本身的限制。以下从认知革命、意识拓扑学、宇宙本体论三个维度切入,结合量子物理、脑神经学与古老智慧的交叉验证,展开一场对觉醒本质的极限探索—— 一、认知革命&am…...
CDP问卷是什么?CDP问卷有什么要求,有什么意义
CDP问卷(Carbon Disclosure Project Questionnaire) CDP问卷是由全球性非营利组织CDP(原Carbon Disclosure Project,现简称CDP)发起的年度环境信息披露项目,旨在帮助企业、城市和投资者测量、管理及公开其…...
GitLab本地安装指南
当前GitLab的最新版是v17.10,安装地址:https://about.gitlab.com/install/。当然国内也可以安装极狐GitLab版本,极狐GitLab 是 GitLab 中国发行版(JH)。极狐GitLab支持龙蜥,欧拉等国内的操作系统平台。安装…...
opencv函数展示
一、图像基础 I/O 与显示 1.cv2.imread() 2.cv2.imshow() 3. cv2.waitKey() 4. cv2.imwrite() 5. cv2.selectROI() 6. cv2.VideoCapture() 二、颜色空间与转换 1. cv2.cvtColor() 2. cv2.split() 三、阈值处理 1. cv2.threshold() 2. 特殊阈值方法...
编写一个写字楼类似抖音剪映的管理系统Demo
编写一个写字楼类似抖音剪映的管理系统Demo。用户可能想要一个简化版的系统,用于管理视频素材、模板和项目,类似于抖音剪映的功能,但针对办公场景。首先,我得明确用户的需求是什么。用户提到的“写字楼类似抖音剪映管理系统”可能…...
前端面试-自动化部署
基础概念 什么是CI/CD?在前端项目中如何应用?自动化部署相比手动部署有哪些优势?常见的自动化部署工具有哪些?举例说明它们的区别(如Jenkins vs GitHub Actions)。如何通过Git Hook实现自动化部署…...
【vue3】vue3+express实现图片/pdf等资源文件的下载
文件资源的下载,是我们业务开发中常见的需求。作为前端开发,学习下如何自己使用node的express框架来实现资源的下载操作。 实现效果 代码实现 前端 1.封装的请求后端下载接口的方法,需求配置aixos的请求参数里面的返回数据类型为blob // 下载 export…...
如何在 Kali 上解决使用 evil-winrm 时 Ruby Reline 的 quoting_detection_proc 警告
在使用 Kali Linux 运行 Ruby 工具(例如 evil-winrm)时,你可能会遇到以下警告: Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline这个警告会导…...
从零到一:网站设计新手如何快速上手?
从零到一:网站设计新手如何快速上手? 在当今数字化时代,网站已成为企业、个人展示信息、提供服务的重要窗口。对于想要涉足网站设计领域的新手而言,如何快速上手并掌握必要的技能成为首要任务。本文将从基础知识、软件工具、设计…...
面向初学者的JMeter实战手册:从环境搭建到组件解析
🌟 大家好,我是摘星! 🌟 今天为大家带来的是面向初学者的JMeter实战手册:从环境搭建到组件解析,废话不多说,让我们直接开始~ 目录 1. JMeter简介 2. JMeter安装与配置 2.1. 安装 2.2.…...
工资管理系统的主要功能有哪些
工资管理系统通过自动化薪资计算、税务处理、员工数据管理、报表生成等功能,极大地提升了薪资发放的效率和准确性。在传统的人工薪资管理中,HR人员需要手动计算每位员工的薪资,并确保符合税务要求,极易出错且耗时。而现代工资管理…...
避坑,app 播放器media:MediaElement paly报错
System.Runtime.InteropServices.COMException HResult=0x8001010E Message= Source=WinRT.Runtime StackTrace: 在 WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|38_0(Int32 hr) 在 ABI.Microsoft.UI.Xaml.Controls.IMediaPlayerElementMethods.get_MediaPlay…...
子函数嵌套的意义——以“颜色排序”为例(Python)
多一层缩进精减参数传递,参数少平铺书代码写更佳。 笔记模板由python脚本于2025-04-16 11:52:53创建,本篇笔记适合喜欢子函数嵌套结构代码形式的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅…...
Redis 的不同数据结构分别适用于哪些微服务场景
我们一块来分析下Redis 的不同数据结构在微服务场景下的具体应用: 1. String (字符串) 特点: 最基本的数据类型,二进制安全,可以存储任何类型的数据(文本、序列化对象、图片等),最大 512MB。支持原子性的…...
