HBase-介绍

1.HBase概述

  1.1 HBase是一个基于HDFS的面向列的分布式数据库,源于Google的BIGTable论文;

  1.2 HBase是Apache Hadoop生态系统中的重要组成部分,主要用于海量结构化数据存储;

  1.3 HBase内部管理的文件全部存储在HDFS中;

2.NOSQL简介

  NoSQL=Not Only SQL,也就是说不仅仅是SQL,会有一些把NOSQL数据的原生查询语句封装成为SQL,比如HBase就拥有Phoenix工具;

  常见的NOSQL与RDBMS:

    NOSQL:HBase,Redis,MongoDB

    RDBMS:MySQL,Oracle,SQL Server,DB2

  HBase数据库的特点:

    (1)它介于NOSQL与RDBMS之间,仅能通过主键和主键的range来检索数据;

    (2)HBase的查询功能简单,不支持JOIN操作;

    (3)HBase中支持的数据类型,byte[],底层存储数据的结构都是byte[];

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

    (5)主要用来存储结构化和半结构化的松散数据;

  结构化,半结构化和非结构化:

    结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构;

    半结构化:具有一定结构,但语义不够确定,典型的如HTML网页,有些字段是确定的(title),有些不确定(table);

    非结构化:杂乱无章的额数据,很难按照一个概念去进行抽取,无规律性;

    与hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力;

3.HBase中表的特点

  3.1 大,一个表可以有几十亿行,上百万列;

  3.2 面向列,面向列族的存储和权限控制,列簇的独立检索;

  3.3 稀疏,对于为空的列,并不占据存储空间,因此表可以设计的非常稀疏;

  3.4 无模式,每行都有一个可排序的主键和任意多的列,列可以根据需要动态的添加,同一张表不同的行可以使用不同的列;

    

4.HBase中的名词概念

  HBase中的数据表如下:

    

  4.1 Row Key概念

    Row Key的概念与mysql中的主键概念是一致的,HBase使用Row Key来唯一的标识一行数据;

    由于HBase中仅支持三种查询方式:

      (1)基于Row Key的范围扫描;

      (2)基于Row Key的单行查询;

      (3)全表扫描;

    因此Row Key在HBase中的设计至关重要,对HBase的性能影响很大;

    Row Key的行键可以说任意字符串(最大长度为64KB),在实际的应用中长度一般为(10-100bytes),最好是16;在HBase的内部,Row Key保存为字节数组,HBas会对表中的数据按照Row Key排序(字典排序);

  4.2 Column的概念

    列,可理解为mysql中列的概念;

  4.3 Column Family的概念

    列族,HBase所引入的概念;HBase通过列族划分数据的存储,列族下面可以包含任务多的列,实现数据的灵活存取;就像家族的概念一样,我们知道一个家族搜索由很多家庭构成的;列族也类似,由一个一个的列构成;

    HBase表的创建的时候就必须指定列族;就像关系型数据库创建的时候必须指定具体的列一样的;

    HBase的列族不是越多越好,官方推荐的是列族最好小于或者等于3,;我们使用的场景一般是1个列族;

  4.4 TimeStamp的概念

    TimeStamp对于HBase来说至关重要,因为它是实现HBase多版本的关键;在HBase中使用不同的TimeStamp来标识相同的Row Key行对应不同版本的数据;

    HBase中通过Row Key和columns确定为一个存储单元成为cell,每个cell都保存着同一份数据的多个版本;版本通过时间戳来索引,时间戳的类型是64位整形,时间戳可以有HBase(在数据写入时自动)赋值,此时间戳是精确到毫秒的当前系统时间;时间戳也可以有客户显示赋值;如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳;每个cell中,不同版本的数据按照倒序排序,即最新的数据排再最前面;

    为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBase提供了两种数据版本回收方式:

      保存数据的最后n个版本;

      保存最近一段时间内的版本(设置数据的生命周期TTL);

    用户可以正对每个列簇进行设置;

原文地址:https://www.cnblogs.com/wnwn/p/12794339.html