原标题:HBase相对Hive查询速度快的对比

首先Hive的底层首先是MR,是属于批处理处理时间相对较长,不属于实时读写。在其架构上HBase和Hive有很大的区别.

架构介绍:

Hive架构

–(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至HiveServer。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

–(2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

–(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

–(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select* from tbl不会生成MapRedcue任务)。

HBase 架构

Client

包含访问HBase的接口并维护cache来加快对HBase的访问

Zookeeper

保证任何时候,集群中只有一个master

存贮所有Region的寻址入口。

实时监控Region server的上线和下线信息。并实时通知Master

存储HBase的schema和table元数据

Master

为Region server分配region

负责Region server的负载均衡

发现失效的Region server并重新分配其上的region

管理用户对table的增删改操作

RegionServer

Region server维护region,处理对这些region的IO请求

Region server负责切分在运行过程中变得过大的region

Memstore 与 storefile

一个region由多个store组成,一个store对应一个CF(列族)

store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile

当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile

当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡

客户端检索数据,先在memstore找,找不到再找storefile

– HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的,即由LSM-Tree(Log-Structured Merge-Tree) +HTable(region分区) + Cache决定——客户端可以直接定位到要查数据所在的HRegion server服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的。

–前面说过HBase会将数据保存到内存中,在内存中的数据是有序的,如果内存空间满了,会刷写到HFile中,而在HFile中保存的内容也是有序的。当数据写入HFile后,内存中的数据会被丢弃。

–多次刷写后会产生很多小文件,后台线程会合并小文件组成大文件,这样磁盘查找会限制在少数几个数据存储文件中。HBase的写入速度快是因为它其实并不是真的立即写入文件中,而是先写入内存,随后异步刷入HFile。所以在客户端看来,写入速度很快。另外,写入时候将随机写入转换成顺序写,数据写入速度也很稳定。

–而读取速度快是因为它使用了LSM树型结构,而不是B或B+树。磁盘的顺序读取速度很快,但是相比而言,寻找磁道的速度就要慢很多。HBase的存储结构导致它需要磁盘寻道时间在可预测范围内,并且读取与所要查询的rowkey连续的任意数量的记录都不会引发额外的寻道开销。比如有5个存储文件,那么最多需要5次磁盘寻道就可以。而关系型数据库,即使有索引,也无法确定磁盘寻道次数。而且,HBase读取首先会在缓存(BlockCache)中查找,它采用了LRU(最近最少使用算法),如果缓存中没找到,会从内存中的MemStore中查找,只有这两个地方都找不到时,才会加载HFile中的内容,而上文也提到了读取HFile速度也会很快,因为节省了寻道开销。

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

1、hbase是可划分成多个region,并且到达一定界限会将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:20(忽略HFile其他快,只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。加上块缓存机制(LRU原则),会取得更高的效率。

实时查询,可以认为是从内存中查询,一般响应时间在1秒左右。HBase的机制是将数据先写入到内存中(缓存Buffer中),当数据量达到一定的量(如128M),产生溢写磁盘操作,在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBaseI/O的高性能。返回搜狐,查看更多

责任编辑:

hive快还是mysql快_HBase相对Hive查询速度快的对比相关推荐

  1. MongoDB快还是MySQL快

    一.两者默认存储引擎的默认数据结构 MySQL 中使用 B+ 树是因为 B+ 树只有叶节点会存储数据,将树中的每一个叶节点通过指针连接起来就能实现顺序遍历,而遍历数据在关系型数据库中非常常见,所以这么 ...

  2. 比MySQL快801倍,字节阿里争相 部署,真香!

    信息化时代,数据即价值.前瞻未来,数据价值的挖掘和沉淀是大数据领域重要的发展方向,是大数据广大开发工程师进阶的必备技能和职业素养. OLAP(Online Analysis Processing)联机 ...

  3. 比MySQL快801倍,OLAP两大神器ClickHouse+Doris技术选型攻略分享

    数字化时代,数据即价值.商战即信息战,如何从海量数据中提取精准的用户群体信息成为众多企业经营的重中之重,这就对开发工程师在速度和精准度方面的要求越来越高. 海量订单如何精准获取地域.时间.来源.渠道等 ...

  4. 比MySQL快801倍,OLAP两大神器ClickHouse和Doris到底怎么选?

    对于匠人而言,一项手艺,如果学不会,结果只有两种:一是低头求人,二是花钱买成品. 对于程序员而言,一款热门软件,如果玩不转,结果也是两种:一是向高手求教,二是看着别人升职加薪. 2021年4月程序员薪 ...

  5. 比MySQL快801倍,太颠覆了!

    行业内卷的话题热度居高不退,程序员群体的职业焦虑也尤为明显,在更新迭代日新月异的技术领域,对新技术软件保持敏感是最起码的职业尊重,尤其是在大数据领域,能否运用新技术解决实际问题已然成为衡量技术人能力水 ...

  6. hive mysql 远程_ubuntu中为hive配置远程MYSQL database

    一.安装mysql $ sudo apt-get install mysql-server 启动守护进程 $ sudo service mysql start 二.配置mysql服务与连接器 1.安装 ...

  7. 四、redis比mysql快的原因

    redis比mysql快的原因 Mysql数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢: 而Red ...

  8. MySQL 中 MyISAM 中的查询为什么比 InnoDB 快?

    MySQL 中 MyISAM 中的查询为什么比 InnoDB 快? 关于,这个问题,我网上看了很多答案.大多内容都雷同,但是我要强调的是,并不是说 MYISAM 一定比 InnoDB 的 select ...

  9. hive向mysql导数据_导入Hive数据导MySQL

    导入Hive数据到MySQL 1. UDF 使用UDF比较方便,代码在http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/a ...

最新文章

  1. Windows 10 全新开始屏幕曝光
  2. c 服务器文件是存在,客户端服务器在较大的文件的c文件传输问题
  3. Linux下修改root密码以及找回root密码的方法
  4. zookeeper3.4.5自动清理日志
  5. hdu 2686 Matrix 最大费用最大流
  6. matlab2016b ubuntu命令行安装 + matconvnet的安装
  7. 放苹果(信息学奥赛一本通-T1206)
  8. 问题 I: A+B Problem : Input/Output Practice 山东科技大学OJ C语言
  9. 无线打印 airprint 服务器,怎么设置普通打印机也能airprint无线打印
  10. Guice 快速入门
  11. Python基础:pip的安装与卸载
  12. 重要不紧急紧急不重要
  13. 云风专访|近40年码龄,从通宵写代码到三思而后行
  14. DedeCMS快速建站
  15. 独立同分布(Independently and Identically Distributed, iid)
  16. Analyzing Crash Reports——分析崩溃报告之一
  17. Google play 发布更新时提示 发生了意外错误。请重试。(64f8e96e)
  18. mysql中 回滚事务是什么_什么是事务?什么是回滚事务,以及四种事务的隔离级别...
  19. HPE收购很忙,不如一起来聊聊Nimble Storage
  20. P1498 南蛮图腾 题解

热门文章

  1. 如何从代码中获取当前方法的名称[复制]
  2. 如何删除UITableView中的空单元格? [重复]
  3. 如何避免在Excel VBA中使用选择
  4. CSS背景不透明度[重复]
  5. #研发解决方案#智慧的太空桥管理智慧设备
  6. python文件操作举例
  7. macOS下nginx配合obs做推流直播.md
  8. jQuery使用经验建议
  9. Rundeck crontab格式
  10. 毕业后的第二个月的一点思绪