海量存储
列式存储
易扩展性
注意:RegionServer的作用是管理region、承接业务的访问。通过横向添加DataNode的机器,进行存储层扩容,提升HBase的数据存储能力和提升后端存储的读写能力
高并发
稀疏
Client
? Client包含了访问HBase的接口,另外Client还维护了对应的cache来加速HBase的访问,比如说cache的meta元数据的信息
Zookeeper
? HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
? Zookeeper的工作如下:
通过Zookeeper来保证集群中只有一个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
通过Zookeeper来监控RegionServer的状态,当RegionServer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
通过Zookeeper存储元数据的统一入口地址
Hmaster
为RegionServer分配Region
维护整个集群的负载均衡
当RegionServer失效时,协调对应Hlog的拆分
HRegionServer
HRegionServer直接对接用户的读写请求,其实是真正“干活”的节点。
HRegionServer的功能如下:
HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用(HLog存储在HDFS)的支持
HDFS具体功能概括如下:
HMaster
RegionServer
其他组件
Write-Ahead logs(WAL)
HBase的修改记录,当对HBase读写数据的时候,数据并不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,解决这个问题,数据会先写入一个叫做Write-Ahead logfile 的文件中,然后再写入内存中。在系统出现故障的时候,数据可以通过这个日志文件重建
Region
HBase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region
Store
HFile存储在Store中,一个Store对应HBase表中的一个列族
MemStore
内存存储,用来保存当前的数据操作,当数据保存在WAL中之后,RegionServer会在内存中存储键值对
HFile
磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的
后期会专门写大数据平台各类组件的具体安装笔记
进入HBase客户端命令行(任意节点均可)
bin/hbase shell
查看帮助命令(命令需要在进入客户端之后才能生效)
help
查看当前数据库中的所有表
list
创建表
create 'student','info' (创建表时必须指定列族)
插入数据到表中
put 'student','1001','info:sex','male'
put 'student','1001','info:age','18'
put 'student','1002','info:name','Tom'
put 'student','1002','info:sex','female'
put 'student','1002','info:age','20'
扫描查看表数据
scan 'student'
scan 'student',{STARRROW => '1001',STOPROW => '1002'}
scan 'student',{STARTROW => '1001'}
查看表结构
describe 'student'
更新指定字段的数据
put 'student','1001','info:name','Nick'
put 'student','1001','info:age','30'
查看“指定行”或“指定列族:列”的数据
get 'student','1001'
get 'student','1001','info:name'
统计表数据行数
count 'student'
删除数据
(删除某个rowkey的全部数据)deleteall 'student','1001'
(删除某个rowkey的某一列数据)delete 'student','1002','info:sex'
清空表数据(表结构仍然保留)
truncate 'student' (注:清空表的操作顺序是先disable,后truncate)
删除表
第一步:disable 'student'
第二步:drop 'student'
变更表信息
将info列族中的数据存放3个版本
alter 'student',{NAME=>'info',VERSIONS=>3}
get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}
RowKey — 行键
Rowkey用来检索记录的主键,访问HBase表中的行只有三种方式
RowKey行键可以是任意字符串(最大长度是64KB,实际应用一般为10-100bytes)在HBase内部,Rowkey保存为字节数组。在存储的时候,数据按照RowKey的字典序排序存储。设计RowKey时,要充分利用排序存储这个特性,把经常读取的行存储在一起(位置相关性)
Column Family — 列族
HBase表中的每个列都归属于某一个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀,比如course:math course:english 是属于course这个列族的
Time Stamp
HBase中通过RowKey和Column确定的一个存储单元称为cell。cell中的数据是没有类型的,全部以字节数组的形式存储。每个cell都保存着同一份数据的多个版本,版本通过通过时间戳来索引。时间戳的类型是64位整型。时间戳可以有HBase(在数据写入时自动)赋值。此时的时间戳是精确到毫秒的系统当前时间。时间戳也可以由客户显示赋值。如果因果那个程序要避免数据版本冲突,必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,最新的数据排在最前面
为了避免数据存在过多版本造成的管理负担,HBase提供两种数据版本回收方式
命名空间
命名空间的结构
There‘s no losing only learning
There‘s no falture only opportunities
There‘s no problem only solutions
原文:https://www.cnblogs.com/bytAya/p/hbase01_20190716.html