背景:大数据的数据存储以及被测系统ETL、BI工具均离不开这两个组件,因此有一些接触。
“hive与hbase的区别究竟是什么?”
当我问出这个问题的时候,资深的大数据同事都会觉得很奇怪,这是两个完全不同的东西,为何会问他们有何区别,但是初始大数据组件的同学也许都会有同样的疑问,认为都是存储数据的组件,都可以从里面获取需要的数据,有何区别呢?
Hive是数据仓库,那又有同学会疑问:数据仓库这个概念又怎么理解。数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。(维是看问题的角度,比如时间,部门,维表放的就是这些东西的定义,事实表里放着要查询的数据,同时有维的ID),在数据仓库中,数据是冗余的。
其实, Hive可以看作是用户编程接口,它本身不存储和计算数据,存储它依赖于HDFS,计算它依赖与MapReduce(MapReduce的原理之后会写专门的文章来通过实际的场景来讲解)
当我们查看表信息时,可以看到在hdfs上实际存储的位置(默认以三副本形式存储,在介绍hdfs文章中有讲解)。
当我们在hive命令行输入一个hive命令时,我们可以看到如下的图片。
HBase具备随即读写功能,是一种面向列的非关系型数据库。
以关系型数据的思维下会感觉,上面的表格是一个5列4行的数据表格,但是在HBase中这种理解是错误的,其实在HBase中上面的表格只是一行数据;由{row key,column(=<family> +<qualifier>),version}唯一确定的单元。
Hive适用于网络日志等数据量大、静态的数据查询。例如:用户消费行为记录,网站访问足迹等。但是不适用于联机实时在线查询的场合。
HBase能在大数据联机实时查询场合大展身手。
延伸解析:如何理解非关系型数据库
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
而非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。