文章目录
优质博客
- https://juejin.im/post/5c666cc4f265da2da53eb714
- http://hbasefly.com/
- https://hbase.apache.org/book.html
hbase是一个运行与、于hadoop上的分布式,可扩展,多版本,大数据存储的非关系型数据库。具有广泛的使用场景。
特点
- 可扩展,即水平扩展
- 严格一致性读写
- 自动或者可配置的表切片
- regionServer之间failover
- 块缓存和布隆过滤器用于实时查询。
- 通过服务器端过滤器查询谓词下推
- 支持通过Hadoop指标子系统将指标导出到文件或Ganglia;或者jmx
架构
hbase是一个分布式的系统,基于master/slaver架构,并且依赖zookeeper,主要分为HMaster和HRegionServer模块
HMaster
Hmaster是master,通常运行在有namenode的机器上,功能:
- 处理用户的各种管理请求:建表,修改表,删除表,权限操作,切分表,合并分片,compactions
- 管理所有的RS,包括Region的负载均衡,RS的宕机恢复,Region的迁移
- 清理过期日志以及文件,每隔一段时间会检查hdfs上的hlog,hfile是否过期,过期则删除
HMaster提供的接口:
- Table (createTable, modifyTable, removeTable, enable, disable)
- ColumnFamily (addColumn, modifyColumn, removeColumn)
- Region (move, assign, unassign)
可以认为是ddl
当master挂掉后,集群仍可以运行一段时间,并且不会影响对数据的读写,但是对于RegionServer的failover,分片功能无法使用
HRegionServer
HRegionServer 是slaver,通常放在datanode的机器上,主要响应用户的IO请求,管理一些Region。
对外提供的接口
- Data (get, put, delete, next, etc.)
- Region (splitRegion, compactRegion, etc.)
zookeeper
- 实现master的高可用:为了避免单点故障,启动多个master,但是只有一个master是active;当zk观测到master宕机时,会选举出一个master
- 管理元数据:正常的RS,hbase:meta的所载RS的位置等
- 参与RS宕机恢复,存储各种中间过程状态
- 实现分布式表锁
数据模型
在hbase中,分为命名空间(namespace),表(table),行,(row),列簇(column family),列(column),cell,timestamp
- namespace:表的逻辑分组,用来区分表在哪一个命名空间,类似mysql中的database
- table:属于一个namespace,一个table由很多行组成
- row:一行由多个列的值组成,每一行有一个唯一的rowkey,按照字典序升序排列;每一行都有相同的列簇,但是列可以不同
- column family:每一个表由多个列簇,一个列簇可以包含多个列,在创建表时需要指定
- column Qualifier:每一个列都属于一个列簇,由“列簇:列标识”标识,创建表的时候不用指定列标识
- cell,一个单元格,由rowkey,(column family:column),timestamp,value确定,标识一个版本;时间戳表示写入数据时在RegionServer上的时间,在将数据放入单元格时也可以指定其他时间戳值。
- timestamp,时间戳,用来确定一个值得版本,一个cell可有由多个版本,但是只有最新的有效
- version:一个单元格可以有多个版本,并且按照时间戳降序排序;可以设置版本数,最小版本数
- 排序:HBase的所有数据模型操作均按排序顺序返回数据。首先是按行,然后是ColumnFamily,然后是column qualifier,最后是时间戳(按相反顺序排序,因此首先返回最新记录)。
例子:
# 创建表名为test,包含一个列簇cf1
# 没有指定命名空间,默认为default
create 'test','cf1'
# 存入rowkey为1,列为cf1:name,值为zzzz,当前时间错得数据
put 'test','rowkey1','cf1:name','zzzz'
put 'test','rowkey1','cf1:age','18'
put 'test','rowkey2','cf1:addr','china'
put 'test','rowkey2','cf1:color','yello'
# 查看test存储的所有的数据,2行,一个列簇,4列,4个单元格
ROW COLUMN+CELL
rowkey1 column=cf1:age, timestamp=1572506321932, value=18
rowkey1 column=cf1:name, timestamp=1572506338839, value=mjh
rowkey2 column=cf1:addr, timestamp=1572507573798, value=china
rowkey2 column=cf1:color, timestamp=1572507585208, value=yello
2 row(s)
数据并非像mysql一样按行存储,而是按列存储,每一个单元格就是一个key-value对
存储
表的数据存储在hdfs上,也就是datanode
- Region:表的横向切分,当表过大的时候就会分片,分为多个region
- store,在一个Region中按照列簇切分为多个store
- storeFile:在store内部,包含多个storeFile,sotreFile是由memStore一次flush产生的
- memStore:内存中的数据,为了加快写的速度而存在
- Hlog:wal中的预写日志
- HFile:数据格式
shell命令
https://blog.csdn.net/vbirdbest/article/details/88236575
以hbase shell
启动shell
hbase(main):013:0> help
COMMAND GROUPS:
Group name: general
Commands: processlist, status, table_help, version, whoami
Group name: ddl
Commands: alter, alter_async, alter_status, clone_table_schema, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, list_regions, locate_region, show_filters
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, cleaner_chore_enabled, cleaner_chore_run, cleaner_chore_switch, clear_block_cache, clear_compaction_queues, clear_deadservers, close_region, compact, compact_rs, compaction_state, flush, hbck_chore_run, is_in_maintenance_mode, list_deadservers, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch, stop_master, stop_regionserver, trace, unassign, wal_roll, zk_dump
Group name: replication
Commands: add_peer, append_peer_exclude_namespaces, append_peer_exclude_tableCFs, append_peer_na