HBase的运算有多快

简介

HBase是模仿google bigtable的开源产品,又是hadoop的衍生品,hadoop作为离线计算系统已经得到业界的普遍认可,并经过N多公司大规模使用的验证,自然地认为Hbase也将随之获得成功。

《HBase: The Definitive Guide》第8章讲述hbase的架构,从架构上看,其架构很完美:

  • LSM - 解决磁盘随机写问题(顺序写才是王道);
  • HFile - 解决数据索引问题(只有索引才能高效读);
  • WAL - 解决数据持久化(面对故障的持久化解决方案);
  • zooKeeper - 解决核心数据的一致性和集群恢复;
  • Replication - 引入类似MySQL的数据复制方案,解决可用性;

此外还有:自动分拆Split、自动压缩(compaction,LSM的伴生技术)、自动负载均衡、自动region迁移。

HBase的一致性

关于HBase的一致性模型,众说纷纭,到底是强一致性还是最终一致性,还需要多了解一下,这里不做讨论。但是有一点可以确认的是对于单行键,具有秒级别的读写性能(强一致性???)

HBase运算有多快

定义一些变量:

  • n = 表中KeyValue条目数量(包括Put的结果和Delete留下的墓碑标示);
  • b = HFile里数据块(HFile Block)的数量;
  • e = 平均一个HFile里KeyValue条目的数量(如果知道行的大小,可以计算得到)
  • c = 每行里列的平均数量

注意,这是在单列族语境中讨论这一点。

先来定义针对指定行健查找相关HFile数据块需要的时间。无论是你在单行上执行get()命令,还是为一次扫描查找起始键,都会有这个动作。

第一步,客户端寻找正确的RegionServer和region。花费3次固定预算找到正确的region——查找ZK,查找--ROOT--, 查找.META.。这是一次O(1)运算。

在指定的region上,行在读过程里可能存在于两个地方:如果还没有刷写到硬盘就位于MemStore,如果已经刷写则位于一个HFile里。简化起见,我们假设只有一个HFile,这一行要门在这个文件里,要么还没刷写,在MemStore里。

让我们用 e 合理代表指定时间在MemStore里的条目数量。如果一行在MemStore里,因为MemStore是使用SkipList实现的,所以查找行的时间复杂度是O(log e)。如果一行已经刷写到硬盘上,需要找到正确的HFile数据块。数据块索引是排过序的,所以查找正确的数据块是一次时间复杂度为O(log b)的运算。查找行里KeyValue对象是在数据块里的一次线性扫描操作。在你找到第一个KeyValue对象后,随后查找剩下的对象就是一次线性扫描。假设行里的单元都在同一个数据块里,扫描的时间复杂度是O(e/b)。如果行里的单元不在同一个数据块里,这种扫描需要访问多个连续数据块里的数据,所以这时的运算由读取的行数决定,其时间复杂度是O(c)。也就是说,这种扫描的时间复杂度是O(max(c,
e/b)).

总之,查找某一行的开销如下所示:

O(1) 用于查找region

+ O(log e)用来在MemStore里定位KeyValue,如果它还在MemStore里;

或者O(1)用来查找region

+ O(log b) 用来在HFile里查找正确的数据块

+ O(max(c, e/b))用来查找扫描的决定性部分,如果它已经刷写到硬盘上了

在访问HBase中的数据时,决定性因素是扫描HFile数据块找到相关KeyValue对象所花费的时间。如果使用宽行,这会在扫描过程中增加处理整行的开销。所有这些分析,都假设知道要查找的行的行健。

如果不知道行健,你需要扫描整个区间(可能是整张表)来查找你关心的行,这个时间复杂度是O(n)。在这样的情况下,你将不再有益于把扫描限定在若干Hfile数据块里。

这里没有讨卵硬盘寻道开销。如果要从HFile里读取的数据已经被加载进数据块缓存,前面的分析是正确的。如果数据还需要从HDFS读到数据块缓存,从硬盘读取数据的开销会增加很多,从学术上将这种分析已经没有意义。

因为行健是所有这些索引的决定性因素,所以结论是访问宽行要比访问窄行开销大。如果知道行健,按照HBase建立索引的内部工作原理,你会从中得到很大好处。

reference

1、HBase权威指南

2、HBase实战

3、HBase整体架构

时间: 2024-10-02 05:53:50

HBase的运算有多快的相关文章

Hbase 设计与开发实战

Hbase 概述 大数据及 NoSQL 的前世今生 传统的关系型数据库处理方式是基于全面的 ACID 保证,遵循 SQL92 的标准表设计模式(范式)和数据类型,基于 SQL 语言的 DML 数据交互方式.长期以来这种基于关系型数据库的 IT 信息化建设中发展良好,但受制于关系型数据库提供的数据模型,对于逐渐出现的,为预先定义模型的数据集,关系型数据库不能很好的工作.越来越多的业务系统需要能够适应不同种类的数据格式和数据源,不需要预先范式定义,经常是非结构化的或者半结构化的(如用户访问网站的日志

HBASE学习使用经验

问题导读: 1. NOSQL是如何产生的以及Hbase 在NOSQL中的地位如何? 2. Hbase框架是如何架构出来的 ? 3. Hbase 是如何检索一条数据以及检索时间复杂度是多少? 4. 如何设计 Hbase 数据库? 5. 还有哪些HBase调优小技巧? 解决方案: 大数据技术如火如荼,在大数据挖掘及分析平台技术中,作为海量数据操作及高客户端并发解决方案的 NoSQL 技术特别是 Hbase 首当其冲,在众多项目中得到广泛的应用,但对于 Hbase 表设计模式/IO 考虑/性能调优等实

【转】Cocoa中的位与位运算

转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).(摘自wikipedia) OC作为c的扩展和超集,位运算自然使用的是c的操作符.c提供了6个位操作符,$,|,^,~,<<,>>.本文不打算做位运算的基础教学,只介绍一

CDH5.0.2安装HBase Phoenix4.2

由于目前公司大量的数据存储在HBase中,各个业务线需要对HBase进行即时查询,但是又不方便实现自己的基于HBase Client的API的数据访问实现,他们希望能够像Hive对HDFS中的数据进行ETL一样,可以对HBase中的数据进行SQL操作 我们最初考虑的方式是Hive On HBase,这样主要思想是将数据存储在HBase中,设置一张Hive表,关联HBae中的数据,具体原理如 http://www.blogjava.net/ivanwan/archive/2011/01/10/34

华为云EI ModelArts,从0到1开发训练AI模型,通过“极快”和“极简”实现普惠AI

华为云EI ModelArts,从0到1开发训练AI模型,通过"极快"和"极简"实现普惠AI现如今 AI 技术.概念火爆.落地应用更是繁多,但开发呢?是否困难?到底有多痛?据了解,大部分 AI 开发者的工作时间并不长,并且十有八九可能不是"科班出身".从编写的教材.录制的课程中就可以看出,所有的教学都不可避免地带有很强的的学术性,即便有意避免研究导向,仍然离产业界的需求相去甚远.并且随着新一波人工智能的热潮,人们发现手里的数据多了,电脑运算的更快

企业级大数据处理方案-02.环境决定需求、性能决定选型

上讲,讲述了大概九种的技术种类以及他们的领域.那么既然有吃饭的,那就必须有做饭的.因此大数据技术结构的选型,必须有的组成部分至少三种(来源.计算.存储) 最简单的数据处理架构: 最少单元的数据处理方案,当然这个不是最好的,为什么呢,问题: 1.流式处理数据(Streaming)时,数据量小时,数据存储到HDFS中,20M或者100K,这种情况是有的.这种计算结果的存储极大浪费了存储空间.HDFS不适用于大批量小文件的存储,(只是不适用,不是不能) 2.数据量大时,数据处理不过来(receiver

计算机中如何实现除数是2的幂次的除法【转载自CSDN】

前言: 本来是在看汇编里面的数据条件传送指令,做习题的时候看着这么一道有关于2的幂次方除法的题目.结果傻眼了,又尼玛不会了.........第二章看的时候就稀里糊涂的,看了几遍也没看太懂,这回又涉及到了 ,发现再回来看还是容易一点.所以写此博文,方便日后复习. 我今天遇到的问题如下: 问题: 除法,在我们平时的算数运算中,结果总是向0的方向舍入的,但是在计算机中,舍入的方式有所不同.在大多数的机器中,除法要比乘法还有加法这些运算都要慢很多倍,计算机中对于2的幂次这种数很是敏感,因为计算机当中用到

matlab实现MSER(最大极值稳定区域)来进行文本定位

一.自然场景文本定位综述   场景图像中文本占据的范围一般都较小,图像中存在着大范围的非文本区域.因此,场景图像文本定位作为一个独立步骤越来越受到重视.这包括从最先的CD和杂志封面文本定位到智能交通系统中的车牌定位.视频中的字幕提取,再到限制条件少,复杂背景下的场景文本定位.与此同时文本定位算法的鲁棒性越来越高,适用的范围也越来越广泛.文本定位的方式一般可以分为三种,基于连通域的.基于学习的和两者结合的方式.基于连通域的流程一般是首先提取候选文本区域,然后采用先验信息滤除部分非文本区域,最后根据

用C#实现MD5的加密(转载)

方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2.md3和md4发展而来. MD5具有很好的安全性(因为它具有不可逆的特征,加过密的密文经过解密后和加密前的东东相同的可能性极小) 引用 using System.Security.Cryptogr