初识HBase

2020-08-16  本文已影响0人  谭英智

如果HBase集群之间的时间差超过30s,则会导致regionServer无法启动

删除表必须先diable表

删除namespace必须先清空ns内的表

修改数据会增加一行,并带时间搓,查询的时候,取最大时间戳那条

删除会增加一行,并带时间戳,并标记为删除

如果修改或者删除时候带的时间错比最大的小,会导致修改无效

表可以指定版本,查询的时候带版本可以获取一个列的多个版本的数据,表示表可以为每条记录保留的版本数

内存达到一定阈值则开始刷写,但是不阻塞,达到阈值的上线,则阻塞客户端写操作,并直到刷写完毕,

触发刷写的条件

https://pan.baidu.com/s/1IcipwNjDDJqYWXvjatKumw#list/path=%2F

27gx

定义

HBase是一个分布式,可扩展,支持海量数据存储的NoSql数据库

数据模型

逻辑上,它跟关系型数据库类似,数据存放在一张表中,有行有列。但实际在底层物理存储结果,是以K-V来存的

逻辑结构

hbase-struct

物理结构

hbase-store

术语

Name Space

命名空间,类似于数据库名,hbase自带两个命名空间,hbase和default,hbase存放内置的表,default为用户默认使用的命名空间

Region

可以理解为以水平切割的一个分表,是按rowkey切分的一个表,初始时只有一个region,当大小达到阈值,会切分成多个region,用于加快检索速度

Row

表中每行都有一个rowkey,一个row有多个col,hdfs以rowkey的字典序存储,查询数据是必须用rowkey来定位数据。

Column Famliy

列族可以理解为以垂直切分的一个分表,需要在建表时指定,官方推荐使用每个表只使用一个列族,这样可以减少小文件的出现,例如每个列族的大小相差很大的时候,会出现有些列族的文件大,而某些列族的文件非常小

Column

列可以动态变化,每行可以拥有不同的col,不需要指定,它属于表中的数据

Time Stamp

代表每行数据的插入时间,hbase使用它来做版本控制,但同一个col有多行数据时,取时间戳最大的那一行,时间戳可以在客户端发put命令时指定,如果此时客户端指定的时间戳小于hbase的那行数据的时间,则会导致更新无效

Cell

是一行里面对应col的数据,没有类型,以字节方式存储,获取和写入时,需要序列和反序列化

架构图

hbase-overview

client

client通过hbase的接口访问Hbase,client会缓存集群的元素据来加速访问,元数据的信息有regionserver在集群对应表和ip的信息

Zookeeper

HMaster

HRegionServer

HDFS

HLog

修改记录时,HBase并不是直接写入HDFS和磁盘,而是先追加到HLog,然后写入内存,在配置时间内再刷写到磁盘,如果这中间机器出现故障,可以通过HLog恢复

Store

Region中的Stroe代表一个列族一个Store

MemStore

内存存储,用于保存最近的数据操作

HFIle

HBase的物理存储文件,并存放在HDFS上

写流程

hbase-write

读流程

hbase-read

Flush

每次在客户端输入Flush ‘tableName’都会在HDFS生成一个文件,内容为memstore合并后的内容

如果RegionServer memstore的内存使用达到配置内存的上限,则会阻塞写操作,直到刷写完到磁盘,其他情况的刷写,不会阻塞写操作

触发条件

Region合并

由于某些Region删除了大量的数据,导致Region内的HFile过小,那么此时就有必要通过合并Region来减少小文件

冷合并

前提时HMaster和HRegionServer都停掉,否则会报错,不适用于生产环境

hbase org.apache.hadoop.hbase.util.Merge table_name\
table_name,a,147608089478.39erijidsfd8s098fen32j3i8d9. \
table_name,b,148893879502.48jfidnxoskd023843257822j3i.

热合并

不需要停机

 merge_region '39erijidsfd8s098fen32j3i8d9','48jfidnxoskd023843257822j3i'

HFile Compaction

由于每次Flush都会从memstroe产生一个HFile,时间长了,会导致HDFS上出现很多小文件,此时有可能同一个cell会有多个版本出现在不同的HFile中,如果此时查询就需要遍历所有的Hfile才可以找到对应的rowkey,所以为了清理过期和删除的数据,就需要进行对HFile合并

Minor Compaction

会把若干个小文件单纯的合并成一个文件,而不会清理过期和删除的数据

Major Compaction

会把Store下的所有HFile合并成一个大HFile,并清理过期和删除数据

触发条件

Region Split

当1个Region的某个store下所有的StoreFile的总大小超过min(R^2*memstore.size,maxSize),会进行split,R为当前table的个数

可以看出这有可能越往后切割的文件会越来越大,直到到达10G。

DDL&DML

进入命令行

Hbase shell

查看有哪些表

list

建表

create 'tableName' 'colFamilyName'

插入/更新数据

put 'tableName','rowkey','colFaimilyName:colName','value'

查看所有记录

scan 'tableName'
scan 'tableName', {startrow=>'rowkey', stoprow=>'rowkey'}

查看表结构

describe 'tableName'

查看某行

get 'tableName','rowKey'
get 'tableName','rowKey','colFamily:col'

表行数

count 'tableName'

删除某rowkey的全部数据

deleteall 'tableName','rowkey'

删除某列

delete 'tableName','rowkey','colFamily:col'

清空表

disable 'tableName'
truncate 'tableName'

删除表

disable 'tableName'
drop 'tableName'

改变表存放的版本数

alter 'tableName',{NAME=>'colFamily',versions=>3}
get 'tableName','rowKey',{column=>'colFamily:col',versions=>3}

上一篇 下一篇

猜你喜欢

热点阅读