HBase笔记

HBase是面向列存储的列式数据库

列式数据库:对数据库中的数据存储时,是按照列来存储的。

附:对于普通的行式关系型数据库,对于查询语句SELECT  ID, NAME FROM STUDENT,则处理该查询命令时,是先从STUDENT表中将所有列的数据都查出来返回给客户端,然后再客户端在将ID列和NAME列过滤出来呈现给客户,这样对于磁盘的IO消耗太大,查询速度就会降低。对于列式数据库来说,则查询时不需要把所有的列数据都查出来。

 

列式数据库的优势:对表中数据的查询只查询一部分列时,查询速率很快,因为不需要查询那些不需要的列数据;当表中数据的大量列的字段值为空时,不会存储空值,这样节省空间。

行式数据库的优势:在定义表的时候,表的列定义已经固定了有哪些列,每一列的类型也是固定的,这样对于给定的一行数据,其最大长度是固定的。因为行式数据库存储时是按照行进行存储的,即存储完一行数据,接着存储下一行数据(且每一行数据的长度是固定大小的),所以在查询的时候,根据存储首地址和行键可以快速定位到要查询的数据的存储位置,因此查询效率非常高。

HBase使用HDFS作为文件存储系统,采用Hadoop的MapReduce来完成HBase对海量数据的操作,利用Zookeeper作为协调工具。

HBase数据在存储数据时,是按照行健存储的,而关系型数据库则是按照插入时间进行存储。

HBase在查询时,也只可以根据行键进行查询,但是我们可以根据API进行进一步过滤。

-ROOT-和.META.是hbase的系统内部表。用户请求过来的时候,首先通过Zookeeper找到-ROOT-表,然后根据-ROOT-表找到对应的.META. 然后根据.META.找到对应的RegionServer,然后根据RegionServer找到最终存放数据的Server。

 

在HBase中,使用delete删除列时,例如命令delete ‘stu’ , ’2’, ’bas:age’,最后删除的是stu表中的行键为2的列簇为bas的其下面的列为age的该列,但是并没有删除stu表中行键非2的列簇为bas下面的age列,即查询get ‘stu’,’1’, ’bas:age’仍保留原数据。

Hbase中的put命令实际上并没有修改值,而是插入新值,因为put时和原数据的时间戳不一样,这样两个版本都存在,默认查询的是最新的,但是旧的仍保留。

利用MapReduce将数据从HDFS中批量导入HBase中的方法:

1、  在HBase中创建表

2、  确定表的行键是什么,确定列

 

Scan也具有强大的过滤功能:作用于客户端上,即查询出所有记录,在客户端进行过滤

Filter同样具有过滤功能:直接作用于RegionServer上,直接根据过滤条件在查询中过滤,只查询需要的数据。直接作用于服务器端。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值