(一)Hbase介绍

Hbase数据库介绍

HBase 是基于 Apache Hadoop 的面向列的 NoSQL 数据库,是 Google 的 BigTable 的开源实现。HBase 是一个针对半结构化数据的开源的、多版本的、可伸缩的、高可靠的、高性能的、分布式的和面向列的动态模式数据库。

HBase 和传统关系数据库不同,它采用了 BigTable 的数据模型增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。

HBase 提供了对大规模数据的随机、实时读写访问。HBase 的目标是存储并处理大型的数据,也就是仅用普通的硬件配置,就能够处理上千亿的行和几百万的列所组成的超大型数据库。

Hadoop 是一个高容错、高延时的分布式文件系统和高并发的批处理系统,不适用于提供实时计算,而 HBase 是可以提供实时计算的分布式数据库,数据被保存在 HDFS (分布式文件系统)上,由 HDFS 保证其高容错性。

HBase 上的数据是以二进制流的形式存储在 HDFS 上的数据块中的,但是,HBase 上的存储数据对于 HDFS 是透明的。

HBase 可以直接使用本地文件系统,也可以使用 Hadoop 的 HDFS。HBase 中保存的数据可以使用 MapReduce 来处理,它将数据存储和并行计算有机地结合在一起。

HBase 是按列族进行数据存储的。每个列族会包括许多列,并且这些列是经常需要同时处理的属性。也就是说,HBase 把经常需要一起处理的列构成列族一起存放,从而避免了需要对这些列进行重构的操作。

HBase 在充分利用列式存储优势的同时,通过列族减少列连接的需求。

特点

  • 它介于 nosql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支 持单行事务(可通过hive 支持来实现多表 join 等复杂操作)。
  • Hbase 查询数据功能很简单, 不支持 join 等复杂操作
  • 不支持复杂的事务(行级的事务)
  • Hbase 中支持的数据类型: byte[]
  • 主要用来存储结构化和半结构化的松散数据。
  • 结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构. 半结构化:具有一定结构,但语义不够确定,典型的如 HTML网页,有些字段是确定的(title), 有些不确定(table) 非结构化:杂乱无章的数据,很难按照一个概念去进行抽取,无规律性
  • 与 hadoop 一样, Hbase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加 计算和存储能力。 HBase 中的表一般有这样的特点:
    (1) 大:一个表可以有上十亿行,上百万列
    (2) 面向列: 面向列(族)的存储和权限控制,列(族)独立检索。 (同时对两个列做处理,并不影响)
    (3) 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

表结构逻辑视图

HBase 以表的形式存储数据。表有行和列组成。列划分为若干个列簇 (column family) 建表语句只需表名和列族名

RowKey

与 nosql 数据库们一样,row key 是用来检索记录的主键。访问 hbase table 中的行,只有三种 方式:
(1) 通过单个 row key 访问
(2) 通过 row key 的 range
(3) 全表扫描
Row key 行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes), 最好是 16或者8。 在 hbase 内部, row key 保存为字节数组。 Hbase 会对表中的数据按照 rowkey 排序(字典顺序)

存储时,数据按照 Row key 的字典序(byte order)排序存储。设计 key 时,要充分排序存储这 个特性,将经常一起读取的行存储放到一起。 (位置相关性)
注意:
字典序对 int 排序的结果是
1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,„,9,91,92,93,94,95,96,97,98,99。要保持整形的自 然序,行键必须用 0 作左填充。
行的一次读写是原子操作 (不论一次读写多少列)。这个设计决策能够使用户很容易的理解 程序在对同一个行进行并发更新操作时的行为。

列簇

hbase 表中的每个列,都归属与某个列族。列族是表的 schema 的一部分(而列不是),必须在 使用表之前定义。

列名都以列族作为前缀。例如 courses:history , courses:math 都属于 courses 这个列族。 访问控制、磁盘和内存的使用统计都是在列族层面进行的。
列族越多,在取一行数据时所要参与 IO、搜寻的文件就越多,所以,如果没有必要,不要 设置太多的列族
(每个列族存放在不同的文件中,建表时列族越少越好)

时间戳

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

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担, hbase 提供了两种数据版本回收方式:
保存数据的最后 n 个版本
保存最近一段时间内的版本(设置数据的生命周期 TTL)。

用户可以针对每个列族进行设置。

cell

由{row key, column( = +

Hbase集群架构

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值