Hbase 入门1

超详细知乎hbase入门

https://zhuanlan.zhihu.com/p/145551967?utm_source=wechat_session

博客文章:https://blog.csdn.net/lzxlfly/article/details/82229511

读写流程

https://blog.csdn.net/qq_43193797/article/details/86601182

一、Hbase简介

Hbase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。依托Hadoop-HDFS作为其文件存储系统,利用MapReduce来处理海量数据,用Zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)。

HBaseHDFS之上提供了高并发的随机写和支持实时查询,这是HDFS不具备的。

二、 Hbase数据模型

Hbase是面向列簇的数据库

表结构创建的时候不需要先指定列,指定列簇。列在列簇下动态增加,不需要指定。

  1. 存储模型分布

  • 在HBase里边,定位一行数据会有一个唯一的值,这个叫做行键(RowKey)
  • Rowkey相之于关系型数据库的话,就相当于一个主键。
  • 一行数据由一个行键和一个或多个相关的列以及它的值所组成

单元格(cell)

(1)cell由行和列的坐标交叉决定;

(2)单元格是有版本的;

(3)cell的内容是未解析的字节数组;

(4)cell由{row key, column( =<family> +<qualifier>), version} 唯一确定的单元。

(5)cell中的数据是没有类型的,全部是字节码形式存贮。

Rowkey

1)决定一行数据,按行检索数据,相当于一级索引

2 按照字典顺序排序的,说明数据是有序的

3)只能存储64k的字节数据,RowKey越短越好

时间戳(Timestamp)

(1)在HBase每个cell存储单元对同一份数据可以有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。

(2)时间戳的类型是 64位整型,一般由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。

时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

列族(Column Family)

(1)HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘tb’, ‘f’;

列名以列族作为前缀,每个“列族”都可以有多个列(column);如f:a, f:b, 新的列族成员(列)可以随后按需、动态加入;

(2)权限控制、存储以及调优都是在列族层面进行的;

(3)HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

2、列簇说明

3、region

4、与关系型数据库对比

三、部署安装

https://segmentfault.com/a/1190000015305292

四、表操作命令

Shell客户端登录

Create直接回车就是查看命令帮助信息

hbase(main):001:0> create 'test','info'

hbase(main):002:0> put 'test','0001','info:username','henry'

hbase(main):003:0> put 'test','0001','info:age','18'

hbase(main):005:0> scan 'test'

hbase(main):006:0> describe 'test'

删除表,先禁用disable

hbase(main):007:0> disable 'test'

hbase(main):008:0> is_enabled 'test'

hbase(main):009:0> drop 'test'

hbase(main):015:0* count 'test'

hbase(main):018:0> get 'test','0001','info:username'

hbase(main):024:0* get 'test','0001'

hbase(main):027:0> delete 'test','0001','info:age'

hbase(main):029:0> truncate 'test'

五、hbase的存储模式

什么是行式存储和列式存储

行式存储:数据以行为单位,每一行包含了很多列,存完一行又跳到第二行继续存

列式存储:数据以列为单位,把每一列聚合在一起去存储。第一列存完之后存第二列,每一列有一个存储的位置,保证所有的列存储在一起

特点

行式存储:维护大量的索引,存储成本比较高。不能做到线性扩展,但是随机读的效率非常高,最大的特点是对事物处理能力非常好。

列式存储:根据同一列数据的相似性原理,利于对数据进行压缩,存储成本比较低。由于每列数据都是分开存储的,所以查找不同列的数据的时候,可以用并行高效查询不同列的数据。

应用环境

列式存储:对于单列或者相对比例少的列获取频率较高。事物使用率不高,读取场景频率不高,数据量非常大,随机更新某些行的频率也不高

行式存储:表与表之间有很强烈的关系型,写数据量不大,利用外键去实现表与表之间的关联。最大的优势是联机事物处理能力,只有千万级数量可以考虑行式存储

列族式存储的概念

列族是多列的组合,每个列都有所属列族,列族是表的scheme的一部分。列不是scheme的一部分,访问控制,磁盘和内存使用统计都是列族层面上进行的。

访问单元是列,这样设计的前提是某些列族的所有列经常是需要一起访问的,所以才会使得数据存储是最优的

Hbase table的组成

Table = rowkey + family + colume + timestamp + value

Rowkey是行键,标识唯一一行数据。一个rowkey中包含很多个列族,每个列族又包含了多个列,每一列数据包含了一个版本加上数据本身的值

数据存储模式

(Table,rowkey ,family,colume,timestamp) -> value

Hbase表结构是key-value结构的,前面的构成了一个key,对应了用户所存储的一个值。

列数据属性

默认一列数据可以保存三个版本,对于聊天应用特别方便,聊天记录是已读、未读等属性

数据存储原型

底层存储上是怎么维护数据的。简单理解就是,rowkey按照字典排序,如果rowkey相同那就根据column按照字典顺序排序

五、数据表解析

·  表名字叫做’demo:user’

·  NAME 列族名字是 f1,记住建表一定要指定列族名

·  VERSION 是Hbase的表保存的数据版本数,默认保存3个版本

·  REPLICATION_SCOPE 值可以为0或者1,0代表不复制,1代表启用复制

·  COMPRESSION_COMPACT,COMPRESSION 是表的压缩类型

压缩特性使用cpu资源换取磁盘资源,对于读写性能不会有太大的影响

六、数据存储目录解析

数据存储目录结构

.tmp目录,当对表创建或者删除操作的时候,会将表移动到tmp,然后再去做处理的表,是一个临时交换的表,临时存储一些当前需要修改的数据结构

WALs,  预写日志,被HLog实例管理的WAL文件

      可以理解为存储HBase的日志,HBase分布式数据库系统的操作日志

archive,存储表的归档和快照,hbase再做表分割合并等操作完成之后会将hfile文件移动这目录中,然后将之前的hfile目录删除掉,这个目录是由master定时任务定期去处理的一个目录,维护和管理hbase存储的数据。

courrupt,存放损坏的日志文件,一般是空的。

data,存储数据的核心目录,系统表数据和用户表数据都存储在这

hbase.id,标识hbase进程用的唯一id

hbase.version,文件格式版本信息,其实就是表明了hfile的版本信息

old WALs,WALs 中的文件被持久化之后呢,就被移动到这个目录来等待删除

用户表数据存储目录结构

创建了一个test表

test:tabledesc表元信息目录

tableinfo:表元信息的具体文件

.tmp:中间临时数据,表元信息被更新的时候这个目录才会被用到

regioninfo:包含了对应region的序列化信息,由于当前只有一个region,所以只有一个regioninfo。就可以认为是表数据的元信息的目录信息

cf:test表的列族,包含所有列族的数据目录。其实就是hfile文件

hbase元信息表

hbase的元数据表为’hbase:meta’,存储在ZooKeeper上面。它也是一张普通的hbase表。它的结构如下:

region是存储数据的最基本单元

Key:

table,key,time 三个部分的组合。因为Hbase根据rowkey排序,所有可用很快的找打对应的表

Values: 指向的是region server指向的region

info:regioninfo 对于region的基本信息存储,平时基本上用不到

info:server region服务器的地址和端口,这样就可以找到服务器

info:serverstartcode 数据校验的时候才用得到的

里面的值也是会进行变化的。RegionServer挂掉,它也会及时的更新,Hbase表相当于Hbase的第一级索引,是Hbase最重要的系统表。


 

猜你喜欢

转载自blog.csdn.net/iris_csdn/article/details/118368266