HBase基本知识和应用场景

本文介绍了Hadoop的局限性和HBase作为其扩展的应用,重点阐述了HBase的分布式、面向列的设计,表结构、HTable的基本概念,以及安装和应用的不同模式。
摘要由CSDN通过智能技术生成

✿ 诞生背景:

      hadoop局限性: Hadoop 只能执行批量处理,并且只以顺序方式访问数据。

✿ hadoop实际应用之一:Hadoop+HBase(随机高效读取)建立NoSQL分布式数据库应用

 

一、HBaseHBase以表的形式存储数据,表有行和列组成。)

1,什么是HBase?

HBase是一个分布式的、面向列的开源数据库。本质是一个数据库(适用于分布式的数据库,它面向列)。

 

HBase 结构,首先是一张表结构,然后与一般表不同的是,一般表:同一个列名下的那些一个个的单元格的值类型是相同的,而 HBase表是同一个列名下的那些一个个的单元格的值类型是不同,且数量不同...
(相比于传统表,同列名下的一个个单元格,hbase 的单元格内容,可以装不定长的数据(一些以键值对形式存储的数据,一些则直接也是单个值的形式))

✿ 传统表:单元格 是一个坑一个萝卜
✿ HBase表:单元格 是一个坑 一把花生 (花生有双仁、单仁的哦)

(图:传统的表)

 (图2:HBase 表)

列族里的数据通过列限定符或列来定位

通过列限定符来定位例如:Sname:nickName,Sage:female 等等;通过列来定位 的例如:Sname:小红

2,HBase 中的表特点:

(1)大:一个表可以有上十亿行,上百万列

(2)面向列:列可以灵活指定,面向列(族)的存储和权限控制,列(簇)独立检索。

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

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

3.1,HTable一些基本概念1

☺ 在HBase中,HTable是其客户端和服务端通信的java api对象,主要提供对表的put/get/delete/scan等操作

     创建一个 hBase 对象:

Configuration conf = HBaseConfiguration.create();

HTable hTable = new HTable(conf, "tableName");

② HTable 的增删改查,这里简单举几个例子

●获取指定行某些单元格对应的值:public Result get(final Get get) throws IOException

●获取表名:public byte [] getTableName()

●添加值:public void put(final Put put) throws IOException

●删除指定单元格/行:void delete(Delete delete) throws IOException

......

ps: HBase Java API 代码开发

常用的几个主要HBase API类和数据模型之间的对应关系:

3.2, HTable一些基本概念2 【表结构逻辑视图

表:HBase用表来组织数据。

行:在表里,数据按行存储,行由行键唯一标识。行键没有数据类型,为字节数组byte[]。

列族:行里的数据按照列族分组,列族必须事先定义并且不轻易修改。表中每行拥有相同的列族。

列限定符:列族里的数据通过列限定符或列来定位,列限定符不必事先定义。

单元:存储在单元里的数据称为单元值,值是字节数组。单元由行键,列族或列限定符一起确定。

时间版本:单元值有时间版本,是一个long类型。

 1、 行键(RowKey):

① 通过单个 row key 访问
② 通过 row key  range
③ 全表扫描

2、 列簇(Column Family):

  • HBase 表中的每个列,都归属与某个列簇。列簇是表的 Schema 的一部分(而列不是)
  • 列名都以列簇作为前缀。例如:student:name,student:age,teacher:age 等等 (例子在文章最后的图1)
  • 访问控制、磁盘和内存的使用统计等都是在列簇层面进行的。
  • 列簇越多,在取一行数据时所要参与 IO、搜寻的文件就越多,所以,如果没有必要,不要设置太多的列簇,官网推荐是小于等于 3(最好就一个列簇)

3、 时间戳(TimeStamp):

■  时间戳可以由 HBase (在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。

■ 每个单元格都保存着同一份数据的多个版本。版本通过时间戳来索引。

■ 如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

■ 每个单元格中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。HBase 在查询的时候,默认返回最新版本/最近的数据。如果需要读取旧版本的数据,可以指定时间戳。

□    为了避免数据存在过多版本造成的的管理(包括存储和索引)负担,HBase 提供了两种数据版本回收方式:
  保存数据的最后 n 个版本
  保存最近一段时间内的版本(设置数据的生命周期 TTL)。
  用户可以针对每个列簇进行设置。

4、 单元格(Cell):

■ 由{RowKey, Column( =<Column Family> + <Qualifier>), Version} 唯一确定的单元。Cell 中的数据是没有类型的,全部是字节码形式存储。

二、HBase 的安装和应用

对应于Hadoop,HBase 也有三种运行模式:单机模式、伪分布式模式、分布式模式。

..........(安装过程遇到的bug,请参考文章)《HBase 安装之后版本的验证的bug:(错误的替换、找不到或无法加载主类、SLF4J)

附录

图1:HBase 表结构

图2:列名以列簇作为前缀的例子

列族里的数据通过列限定符或列来定位

通过列限定符来定位例如:Sname:nickName,Sage:female 等等;通过列来定位 的例如:Sname:小红

参考文章:

 《Hbase总结(五)-hbase常识及habse适合什么场景》Hbase总结(五)-hbase常识及habse适合什么场景_Java海洋的博客-CSDN博客

 《hBase之HTable踩坑》hBase之HTable踩坑 - 简书 

 《HBase基础知识》HBase基础知识_hbase的并且_编程有了模型的博客-CSDN博客

 《HBase 的Get(读),Put(写),Delete(删),Scan(扫描)和Increment(列值递增)》https://www.cnblogs.com/wangleBlogs/p/9935553.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值