hbase相对hive查询速度快的对比

qfdsj qfdsj     2023-01-01     507

关键词:

  首先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的高性能。

?

 

hbase与hive集成(代码片段)

...的文件在MySQL中做了一个双射关系,以方便使用HiveQL管理查询用于数据分析、清洗,Hive适用于离线的数据分析和清洗HBase数据库,面向列族存储的非关系型数据库用于存储结构化和非结构化的数据,不适合做关联查询,join延迟较... 查看详情

hive是啥,hive与关系型数据库的区别

...道多少。HBase是非关系型数据库(KV型),对key做索引,查询速度非常快(相比较Hive),适合实时查询;而Hive是关系型数据结构,适合做后期数据分析。和单机的MySQL,Oracle比较的话,Hive的优点是可以存储海量数据,只是查询速... 查看详情

hive与hbase区别

...成熟完备的产品架构,速度无法满足日常OLTP型业务。Hive查询通常也具有高延迟。由于它在Hadoop上运行批处理,因此获取查询结果可能需要几分钟甚至1小时。此外,更新数据可能既复杂又耗时。Hive不是擅长用于查询数据集(尤... 查看详情

hbase和hive的差别是啥,各自适用在啥场景中

...构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。而HBase表是物理表,适合存放非结构化的数据。2.Hive是基于MapReduce来处理数据,而MapReduce处理数据是基于行的模式;... 查看详情

hbase与hive(代码片段)

...储的文件在Mysql中做了一个双射关系,以方便用HQL去管理查询。用于数据分析、清洗:Hive适用于离线的数据分析和清洗,延迟较高。基于HDFS、MapReduce:Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行... 查看详情

怎样删除hive和hbase映射表

参考技术A虚拟机的速度本身就非常慢,还有就是hive的用法也很重要,不是随便写写就可以的,同样一种查询方法,写法不一样算法和时间也都会不同本回答被提问者采纳 查看详情

如何用hive查询hbase中的数据

...se,命令:./start-hbase.sh第四步,建立关联表,这里我们要查询的表在hbase中已经存在所以,使用CREATEEXTERNALTABLE来建立,如下: 查看详情

hive与hbase的区别与联系

...结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。hive需要用到hdfs存储文件,需要用到MapReduce计算框架。hive可以认为是map-reduce的一个... 查看详情

利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询

有个需求是纬度表需要秒出数据,首先表刚好也是1-1批对的情况,首先想到了利用hbase的索引机制。(表数据大概在4--30E之间)虽然网上有很多直接建立hive表,自动创建hbase表的例子,但是这种情况不能进行hbase表的region预分区,导致热... 查看详情

hive和hbase有啥区别

...特点是仿照bigtable的列势存储,对于大型的数据的存储,查询比传统数据库有巨大的优势,而hive其产生主要应对的数据仓库问题,其将存在在hdfs上的文件目录结构映射成表。主要关注的是对数据的统计等方面。适合的场景:hbase... 查看详情

如何查看当前hive运行的应用

...替代hive。速度都比hive要快很多。  偶理解HIVE只是提供查询和数据处理功能的(解析HIVEQL语句为MAPReduce任务),不负责数据存储的。数据存储应该是HBase和HDFS的功能,HBase是KeyValue的存储方式,适用于固定列查询的数据,如果... 查看详情

面试:hbase和hive的区别

...p;Hive是一个构建在Hadoop基础设施之上的数据仓库,通过HQL查询存放在HDFS上的数据,不能交互查询。HBase是一种Key/Value系统,它运行在HDFS之上,可以交互查询。2. Hive只是一种类SQL的引擎,运行MapReduce任务,不能更新数据。Hbase... 查看详情

hive+hbase,用hql查询hbase(代码片段)

Hive整合HBase:数据实时写Hbase,实现在Hive中用sql查询以下操作的Hive版本:2.3.6,HBase版本:2.0.4在HBase中创建表:t_hbase_stu_infocreate‘t_hbase_stu_info‘,‘st1‘在Hive中创建外部表:t_hive_stu_infocreateexternaltablet_hive_stu_info(idint,namestring,ageint,s... 查看详情

hbase与hive的集成操作(代码片段)

...供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询插入操作以及进行Join和Union等复杂查询,同时也可以将hive表中的数据映射到HBase中;2.模型概念  2.1将ETL操作的数据存入HBase      2.2HBase作为Hive的数据源  ... 查看详情

hive和hbase的区别

...Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoo... 查看详情

hive和hbase的区别

...Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoo... 查看详情

hive与hbase的区别

...Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hado 查看详情

hive&hbase

...Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoo... 查看详情