欢迎投稿

今日深度:

HBase笔记,

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上,直接根据过滤条件在查询中过滤,只查询需要的数据。直接作用于服务器端。

 

www.htsjk.Com true http://www.htsjk.com/hbase/42508.html NewsArticle HBase笔记, HBase是面向列存储的列式数据库 列式数据库:对数据库中的数据存储时,是按照列来存储的。 附:对于普通的行式关系型数据库,对于查询语句SELECT  ID, NAME FROM STUDENT,则处...
相关文章
    暂无相关文章
评论暂时关闭