Hbase学习Hbase基础介绍

一、产生背景

自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案。Hadoop使用分布式文件系统,用于存储大数据,并使用MapReduce来处理。Hadoop擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化数据的处理。

Hadoop的限制

Hadoop只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。

Hadoop随机存取数据库

应用程序,如HBase,Cassandra,CouchDB,Dynamo和 MongoDB 都是一些存储大量数据和 以随机方式访问数据的数据库。

总结:

1、海量数据量存储成为瓶颈,单台机器无法负载大量数据。

2、单台机器IO读写请求成为海量数据存储时候高并发大规模请求的瓶颈

3、随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器

二、Hbase简介

Hbase是BigTable(源码使用Java编写)版本。是Apache Hadoop的数据库,是建立在HDFS之上,被设计用来提供高可靠性、高性能、、列存储、可伸缩、多版本的NoSQL的分布式数据存储系统,实现对大型数据的实时,随机的读写访问。

Hbase依赖于HDFS做底层的数据存储,BigTable依赖于Google GFS做数据存储

Hbase依赖于Mapreduce做数据计算,BigTable依赖于Google MapReduce做数据计算

HBase依赖于Zookeeper做服务协调,BigTable依赖Google Chubby做服务协调

三、关系型数据库和非关系型数据库的典型代表

NoSQL:Hbase、redis、Mongdb

RDBMS:mysql,oracle、sqlserver,db2

四、Hbase这个NOsql数据库的要点

1、它介于NoSQL和RDBMS之间,仅能通过主键(rowkey)和主键的range([startkey,endkey))来检索数据

2、Hbase查询数据功能很简单,不支持join等复杂操作

3、不支持复杂的事务,只支持行级事务(可以通过hive支持来实现多表join等复杂操作)

4、Hbase中支持的数据类型:Byte[]  (底层所有数据的存储都是字节数组)

5、主要用来存储结构化数据和半结构化的松散数据。

6、列可以动态增加,并且列为空就不存储数据,节省存储空间

五、Hbase中的表特点

1、大:一个表可以有上十亿行,上白袜列

2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。

3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

六、Hbase表结构逻辑视图

初次接触HBase,可能看到以下描述会懵:“基于列存储”,“稀疏MAP”,“RowKey”,“ColumnFamily”。

其实没那么高深,我们需要分两步来理解HBase, 就能够理解为什么HBase能够“快速地”“分布式地”处理“大量数据”了。

  1.内存结构

  2.文件存储结构

七、名词概念

假如我们有如下一张表

1、Rowkey概念

Rowkey的概念和mysql中的主键是完全一样,Hbase使用Rowkey来唯一的区分某一行的数据。

由于Hbase只支持3中查询方式:

a、基于Rowkey的单行查询

b、基于Rowkey的范围扫描

c、全表扫描

因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。设计的时候要兼顾基于Rowkey的单行查询也要键入Rowkey的范围扫描。rowkey 行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是 16。在 HBase 内部,rowkey 保存为字节数组。HBase 会对表中的数据按照 rowkey 排序 (字典顺序)

 

posted @ 2019-04-01 15:18  xiaolaotou  阅读(203)  评论(0编辑  收藏  举报