以简洁为主,不长篇论述,方便记忆
读写流程
regionserver简称rs
读流程
- client访问zk,获取meta表信息
- 依据meta表信息获取待读取的rs上的region信息
- client向rs发起读请求
- rs先查询memstore,再查询blockcache,还没找到就去查storeFile
- rs将数据响应给client
写流程
- client访问rs,获取meta表信息
- 依据meta表信息获取待写入的rs上的region信息
- client向rs发起写请求
- rs收到吧数据写入Hlog
- rs再把数据写入memstore, 都ok就算写入成功
- memstore达到128M或其他条件,flush成storefile
- storefile大于3触发compact合并成1个
- storefile达到10G时,触发region split,由master进行分配
rowkey设计
三个关键词,多了记不住
加盐
哈希
反转
hbase预分区
- 可以建表时指定分区,SPLITS参数,就是给rowkey划分个范围
- 比如1-1000,1001-2000,2001-3000 每个范围分一个region,填充数据的时候数rowkey不同,数据就进入不同的region
hbase二次索引
Hbase依据非rowkey字段查询时比较困难,如果列族中某一列是经常用来做筛选条件查询的,可以建立一个二级索引表,把这一列作为key,rowkey作为value新建一张表. 这样就可以查询其他信息
缺点就是两个表未必能同步更新信息.
hbase优化
建表时的优化
- rowkey优化
- 列族数量不要多,1到2个就ok
- 设置region server的缓存
- 设置数据的保存时间
写数据时的优化
- 关闭WAL,有风险
- 批量写数据,将Put包装成List
- 加大写入时的缓存大小. (快,耗内存)
- compact时间
- memstore缓存大小
读数据时的优化
-Scan.setCaching,设大了查的快,但是耗内存
-region的大小,大了小了各有坏处和好处
-region server的线程数
硬件优化
- 多给region server内存
hbase组成及各组件作用
client
- 提供接口
- 提供缓存
zookeeper - 保证hmaster高可用
- region server动态上下线
Hmaster - 负载均衡 region分配
- schema更新,(ns table创建与删除)
region server - region拆分与合并
- 负责客户端请求
- 将客户群请求提前写入Hlog