HBase如何快速查询

HBase数据表查询操作和获取多版本数据 HBase中的表包含列族,其列限定符包含值和时间戳。在大多数 HappyBase API 中,列族和限定符名称被指定为单个字符串,例如cf1:col1,而不是作为两个单独的参数。虽然列族和限定符在 HBase 数据模型中是不同的概念,但它们在与数据交互时几乎总是一起使用,因此将它们视为单个字符串会使 API 变得更简单。要检索给定行的列的所有版本,可以使用 Table.cells()。如果您事先知道需要哪些列,则可以通过将这些列明确指定给 Table.row() 和 Table.rows() 来提高性能。 阅读详情

HBase快速查询

   HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的,即由LSM-Tree(Log-Structured Merge-Tree) + region分区 + Cache决定——客户端可以直接定位到要查数据所在的HRegion server服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的。
   HBase会将数据保存到内存中,在内存中的数据是有序的,如果内存空间满了,会刷写到HFile中,而在HFile中保存的内容也是有序的。当数据写入HFile后,内存中的数据会被丢弃。HFile文件为磁盘顺序读取做了优化,按页存储。多次刷写后会产生很多小文件,后台线程会合并小文件组成大文件,这样磁盘查找会限制在少数几个数据存储文件中。HBase的写入速度快是因为它其实并不是真的立即写入文件中,而是先写入内存,随后异步刷入HFile。所以在客户端看来,写入速度很快。另外,写入时候将随机写入转换成顺序写,数据写入速度也很稳定。
   而读取速度快是因为它使用了LSM树型结构,而不是B或B+树。磁盘的顺序读取速度很快,但是相比而言,寻找磁道的速度就要慢很多。HBase的存储结构导致它需要磁盘寻道时间在可预测范围内,并且读取与所要查询的rowkey连续的任意数量的记录都不会引发额外的寻道开销。比如有5个存储文件,那么最多需要5次磁盘寻道就可以。而关系型数据库,即使有索引,也无法确定磁盘寻道次数。而且,HBase读取首先会会从内存中的MemStore中查找,如果中没找到,在缓存(BlockCache)中查找,它采用了LRU(最近最少使用算法),只有这两个地方都找不到时,才会加载HFile中的内容,而上文也提到了读取HFile速度也会很快,因为节省了寻道开销。

快速查询(从磁盘读数据)
   HBase是根据rowkey查询的,只要能快速的定位rowkey, 就能实现快速的查询,主要是以下因素:

  1. HBase是可划分成多个region,你可以简单的理解为关系型数据库的多个分区
  2. 键是排好序了的
  3. 按列存储的

   首先,能快速找到行所在的region(分区),假设表有10亿条记录,占空间1TB,分列成了500个region,1个region占2个G。最多读取2G的记录,就能找到对应记录
   其次,是按列存储的,其实是列族,假设分为3个列族,每个列族就是666M, 如果要查询的东西在其中1个列族上,1个列族包含1个或者多个HStoreFile,假设一个HStoreFile是128M, 该列族包含5个HStoreFile在磁盘上。剩下的在内存中
   然后,是排好序了的,要的记录有可能在最前面,也有可能在最后面,假设在中间,只需遍历2.5个HStoreFile共300M
   最后,每个HStoreFile(HFile的封装),是以键值对(key-value)方式存储,只要遍历一个个数据块中的key的位置,并判断符合条件可以了。 一般key是有限的长度,假设跟value是1:19(忽略HFile上其它块),最终只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。 加上块缓存机制(LRU原则),会取得更高的效率。

实时查询
   实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。
   实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。

LSM树存储引擎

  LSM树的设计思想:把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。
  数据首先会插入到内存中的树,为了防止数据丢失,写内存的同时需要暂时持久化到磁盘,即输入数据时数据会以完全有序的形式先存储在日志文件中(对应HBase的MemStore和HLog)。当日志文件被修改时,对应的更新会被先保存在内存中来加速查询。
  当内存中树的数据达到阀值时,会进行合并操作。合并操作会从左至右遍历内存中的叶子节点与磁盘中树的叶子节点进行合并,当合并的数据量达到磁盘的存储页的大小时,会将合并的数据持久化到磁盘。同时更新父亲节点对叶子节点的指针。
在这里插入图片描述
  LSM树所有节点都是满的并按页存储,经过多次的flush会创建很多数据存储文件,后台线程会将小文件聚合成大文件,因此磁盘的寻道操作就会被限制在一定数目的数据存储文件中,以优化读性能。磁盘上的树结构也可以分割成多个存储文件,因为所有的存储数据都是按照Key有序排列的,因此在现有节点中插入新的关键字不需要重新排序。
  LSM-Tree属于传输型,在磁盘传输速率上进行文件的排序和合并以及日志操作,可以更好的拓展到更大的数据规模上,因为它会使用日志文件和一个内存存储结构把随机写操作转化为顺序写,读写独立,不会产生两种操作的竞争。

LSM树在HBase中的应用
  LSM树可以看成n层合并树。在HBase中,它把随机写转换成对MemStore和HFile的连续写。下图展示了LSM树数据写的过程。
在这里插入图片描述
数据写(插入,更新):数据首先顺序写如HLog(WAL),MemStore上的树达到一定大小之后,需要flush到HRegion磁盘中,这样MemStore就变成了DataNode上的磁盘文件StoreFile,定期HRegionServer对DataNode的数据做merge操作,彻底删除无效空间,多棵小树在这个时机合并成大树,来增强读性能。在StoreFile中,针对顺序磁盘操作进行优化。

数据读:首先搜索MemStore,如果不在MemStore中,则到StoreFile中寻找。

数据删除:不会去删除磁盘上的数据,而是为数据添加一个删除标记。在随后的major compaction中,被删除的数据和删除标记才会真的被删除。

LSM数据更新只在内存中操作,没有磁盘访问,因此比B+树要快。对于数据读来说,如果读取的是最近访问过的数据,LSM树能减少磁盘访问,提高性能。

针对LSM树读性能hbase的优化:
  Bloom-filter:可以快速判断某一个小的有序结构里有没有指定数据的。于是就可以不用二分查找,而只需简单的计算几次就能知道数据是否在某个小集合里,效率得到了提升,但付出的是空间代价。
  compact:小树合并为大树。因为小树性能有问题,所以要有个进程不断地将小树合并到大树上,这样大部分的老数据查询也可以直接使用log2N的方式找到,不需要再进行(N/m)*log2n的查询了。

Elasticsearch+hbase 实现hbase中数据的快速查询(一) 之前虽做了solr-hbase构建二级索引以及快速查询,但是考虑到以后生成的数据可能会很多,一旦到了亿级以上,solr查询效率会渐渐慢下来.老板不满意,又听了几位专家的建议,采用Elasticsearch+hbase 来实现hbase中数据的快速查询. 首先,安装Elasticsearch. CDH中没有集成Elasticsearch,所以只好独立安装. 1.下载elasticsearch-... 阅读详情

相关推荐

Elasticsearch+hbase 实现hbase中数据的快速查询(二)

接下来是Elasticsearch (版本5.x)中数据的CRUD 操作,为此,根据ES官网上的资料总结了一个工具类. 具体如下: (1)maven 添加依赖 (2)工具类代码: public class ESClientUtils { protected static Logger logger = Logger.getLogger(ESClientUtils.class); ...

cafebar123的专栏 4147

HBase

一、初始HBase 1.1 HBase简介 1.1.1 HBase是什么 HBase是Goole的BigTable论文而来,是一个分布式海量列示非关系型数据库系统,可以提供超大规模数据集的实时随机读写。 认识HBase列存储 如下是MySql存储机制,空值字段浪费存储空间 如果是列存储的话: 列存储的优点: 1.减少存储空间的占用。 ...

helloworld999999的博客 4364

HBase伪快速分页查询

之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在mysql里面,后来里面数据上亿之后,就查不到了,而且数据还在以指数级增长方式上报,后来,这部分业务单独迁移到hbase集群去存放,之前页面的查询也改查hbase了。但是hbase对分页查询这种东西支持不好,如果按照以往查询mysql的思路,查询出一个总的count,再查询出这一页的数据,这种...

我们的征途是星辰大海 2362

hbase数据查询及过滤器详细使用

创建并插入数据: hbase(main):179:0> create 'scores','grade','course' hbase(main):180:0> put 'scores','zhangsan01','course:art','90' hbase(main):181:0> scan 'scores' ROW

小强签名设计 的博客 2万+

ES+HBase【案例】仿百度搜索01:企业中快速复杂查询痛点分析

ES+HBase【案例】仿百度搜索01:企业中快速复杂查询痛点分析

weixin_40612128的博客 1127

基于Open Cluster Management构建企业级多Kubernetes集群管理平台OpenClaw

在云原生架构中,Kubernetes已成为容器编排的事实标准。随着业务规模扩大,企业往往需要管理分布在多个云环境或数据中心的Kubernetes集群,这带来了集群管理、应用分发、策略统一和监控运维等复杂挑战。多集群管理技术通过提供统一控制平面,实现了对分布式资源的集中管控,其核心价值在于提升运维效率、保障安全合规并降低管理成本。Open Cluster Management(OCM)作为CNCF沙箱项目,采用Kubernetes原生架构,通过自定义资源定义(CRD)和控制器模式,为构建多集群管理平台提供了标

weixin_33747129的博客 368

Hbase对表进行查询操作详细教程

创建命名空间 booksystem Create_namespace’booksystem’ 创建表 bookinfo Create ‘booksystem:bookinfo’,’info1’ 追加列族 info2 Alter ‘booksystem:bookinfo’, ‘info2’ 添加数据 Put ‘booksystem:bookinfo’,’101’,’info1:name’,hbase’ 扫描出bookinfo的所有数据 Scan ‘booksystem:bo

weixin_45890771的博客 1万+

昇腾CANN实战:如何用DVPP+AIPP实现32路视频流毫秒级预处理(附性能对比)

本文深入探讨了昇腾CANN架构中DVPP和AIPP模块在32路视频流毫秒级预处理中的硬件加速技术。通过异构计算架构的优化,实现了从传统CPU方案的40.7毫秒到CANN方案3.4毫秒的显著性能提升,特别适用于智能安防领域的实时视频分析需求。文章详细解析了DVPP多通道并行设计和AIPP模型级预处理融合的技术细节,并提供了性能对比数据与实战调优经验。

alice7model的博客 919

Hbase相关操作

1.进入shell hbase(main):003:0>hbase shell 2.查看所有表 hbase(main):003:0> list 3.根据rowKey查询某个记录 hbase(main):003:0>get '表名','rowKey' 4.常用过滤器 过滤方式是通过value过滤,匹配出value含7259的数据。 scan 'buss_surface', FILTER=>"ValueFilter(=,'substring:7259')" 过滤方式是通

julielele的博客 2780

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 286

基于STM32设计的智能家居控制系统(华为云)_363

本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向

881

HBase的快速查询

快速查询和实时查询 快速查询: 一、分区存储 HBase将每个表划分为多个region,每个region用rowkey来华为,数据的查询也是通过rowkey来查询 查询过程:client向HBase依赖的zookeeper获取metaregion的位置,然后通过metaregion中的记录获取到所要查询的rowkey 对应的region,这样就确定到一个region范围 ...

风雨落 7053

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

10.28华为OD机试真题 新系统 - AI推理任务并行额度最大值 (Java/Py/C/C++/Js/Go)

算法大师! 280

为什么Hbase能实现快速的查询

原地址:https://www.cnblogs.com/1130136248wlxk/p/4990910.html 你的快速是指什么? 是根据亿级的记录中快速查询,还是说以实时的方式查询数据。 A:如果快速查询(从磁盘读数据),hbase是根据rowkey查询的,只要能快速的定位rowkey, 就能实现快速的查询,主要是以下因素: 1、hbase是可划分成多个region,你可以简单的理解为关系...

tclwh123的博客 644

LangChain .NET:C#开发者构建AI应用的RAG框架与实战指南

大语言模型(LLM)作为当前人工智能的核心技术,通过深度学习海量文本数据,掌握了强大的语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,从而实现对复杂语义的建模。这一技术价值在于能够将非结构化的自然语言转化为可计算、可推理的表示,为各类智能应用提供认知基础。在实际工程实践中,LLM常被应用于构建检索增强生成(RAG)系统和AI智能体(Agent)。RAG通过结合外部知识库检索与LLM生成,有效提升了问答的准确性和事实性,是构建企业知识库、智能客服等场景的关键技术。

weixin_42538175的博客 705

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

2079

为什么HBase数据查询快速

快速查询可以分作两方面: 一是根据亿级的记录中快速查询,二是以实时的方式查询数据。 A:如果快速查询(从磁盘读数据),hbase是根据rowkey查询的,只要能快速的定位rowkey,  就能实现快速的查询,主要是以下因素:      1、hbase是可划分成多个region,你可以简单的理解为关系型数据库的多个分区。       2、键是排好序了的       3、按列存储的

Dreamershi的专栏 4148

JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数

本文是该专栏的第79篇,后面会持续分享python爬虫干货知识。本文以7881游戏平台为例,通过JS逆向获取它的lb-sign参数和lb-timestamp参数生成规律。针对lb-sign和lb-timestamp两个参数具体的“逆向”思路逻辑,笔者将在本文进行详细说明,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 1220

Hbase使用filter快速高效查询

  本博客是hbase使用filter快速高效查询的方法,我会慢慢补齐   几大Filters 1、Comparision Filters      1.1  RowFilter 1.2 FamilyFilter      1.3 QualifierFilter      1.4 ValueFilter      1.5 DependentColumnFilter ...

caodaoxi的专栏 186

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hbase java 分页查询_HBase伪快速分页查询

之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在mysql里面,后来里面数据上亿之后,就查不到了,而且数据还在以指数级增长方式上报,后来,这部分业务单独迁移到hbase集群去存放,之前页面的查询也改查hbase了。但是hbase对分页查询这种东西支持不好,如果按照以往查询mysql的思路,查询出一个总的count,再查询出这一页的数据,这种方式去查询hb...

weixin_39689687的博客 338

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: Linux的进程调度
下一篇: Spark Streaming从Kafka中读数据的两种方式
K. Bob
博客等级 码龄8年 82粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值