大数据面试问答-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.mzph.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应运而生,其核心组件…