HBase学习笔记——入门简介

来源:互联网 发布:js省市区三级联动插件 编辑:程序博客网 时间:2024/05/01 15:35

一、HBase是什么?

HBase(Hadoop database)是一种构建在HDFS之上的分布式、面向列的和提供高可靠性、高性能、可伸缩、实时读写的开源数据库系统,在需要实时读写、随机访问超大规模数据集时,可以使用HBase。

HBase是Apache的Hadoop项目的子项目,该技术来源于 Fay Chang 所撰写的Google论文”Bigtable:一个结构化数据的分布式存储系统”。HBase 是Bigtable 的开源实现,与Google Bigtable 利用GFS作为其文件存储系统类似,HBase 利用Hadoop HDFS 作为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据(20T);Google Bigtable 利用Chubby作为协同服务,HBase 利用Zookeeper作为对应。

二、HBase的优点

尽管已经有许多数据存储和访问的策略和实现方法,但事实上大多数解决方案,特别是一些关系类型的,在构建时并没有考虑超大规模和分布式的特点。许多商家通过复制和分区的方法来扩充数据库使其突破单个节点的界限,但这些功能通常都是事后增加的,安装和维护都和复杂。同时,也会影响RDBMS的特定功能,例如联接、复杂的查询、触发器、视图和外键约束这些操作在大型的RDBMS上的代价相当高,甚至根本无法实现。

HBase从另一个角度处理伸缩性问题,它通过线性方式从下到上增加节点来进行扩展,与Hadoop一样HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase不同于一般的关系数据库,是一个适合非结构化数据存储的数据库,基于列而不是基于行的模式,主要用来存储非结构化和半结构化的松散数据。 它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表连接等复杂操作)。HBase不是关系型数据库,也不支持SQL,但是HBase巧妙地将大而稀疏的表放在商用的服务器集群上,这是RDBMS不能处理的。

面向行的RDBMS所面临的问题:

  1. 面向行意味着表中的行是一行一行地进行存储,当进行查询时,将查询整个行的信息。如select username from student,虽说我们只要username这个字段,但是面向行的机制就把所有字段的信息都加载到内存当中,导致I/O效率低下。
  2. 在RDBMS中,因为事先已经定义了每个字段的类型、大小,所以即使该字段没值也将占用存储空间,导致空间利用率不高。

HBase面向列是把列族存放在不同的文件当中,比如经常访问其中的一个列族A,其它列族很少访问,那么当访问A列族的时候就不需要去访问其它列族所存放的文件,可以提高I/O效率。

过度设计。比如说一开始部署一个应用的时候就考虑用HBase,因为HBase在小数据量的时候性能并没有比MySQL好,而且该应用的数据量也不一定达到MySQL存储不了,所以一开始采用HBase就属于过度设计,可以在数据量庞大的时候再考虑进行迁移。

三、HBase中表的特点

大:一个表可以有上亿行,上百万列。稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。面向列:面向列(族)的存储和权限控制,列(族)独立检索。无模式:每一行包含一个主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有不同的列。 类型单一:HBase中存储的数据都是字符串类型,没有像其他RDBMS有什么Int、Double、Data等类型。

HBase在Hadoop生态体系如下图所示:
HBase在Hadoop生态体系

0 0
原创粉丝点击