个人笔记部分:
列簇个人理解为是面向对象中的类,里面的具体列是属性,属性有它的值就是value
1、hbase是列式存储,和mysql的行式存储不一样
2、hbase中有列簇概念,同一个列簇下的列存储在一起,在Region的一个StoreFile中
3、hbase是按照rowkey进行查找,要查询的字段要想办法放到rowkey中
4、hbase适合OLAP类的应用(联网分析analysis处理应用),比如推荐系统
5、hbase内部使用LSM三层模型进行存储,数据先写到内存MemStore中,内存达到一定阈值再刷写到硬盘StoreFile中,再满足一定条件时,小的StoreFile会合并为大的StoreFile
写文件流程:
1、hbase client要写输入了,先从zookeeper中拿到meta表信息,根据数据的rowkey找到应该往哪个RegionServer写
2、然后hbase会将数据写入对应RegionServer的内存MemStore中,同时记录操作日志WAL
3、当MemStore超过一定阈值,就会将内存MemStore中的数据刷写到硬盘上,形成StoreFile
4、在触发了一定条件的时候,小的StoreFile会进行合并,变成大的StoreFile,有利于hdfs存储
读文件流程:
1、hbase client要读数据了,先从zookeeper中拿到meta表信息,根据要查的rowkey找到对应的数据在哪些RegionServer上
2、分别在这些RegionServer上根据列簇进行StoreFile和MemStore的查找,得到很多key-value结构的数据
3、根据数据的版本找到最新数据进行返回
参考文档:http://www.sohu.com/a/300230256_818692
======================================================
常用操作
1.创建表:create 'student','info' --表名,列簇名(列簇必须指定)
2.插入数据到表:
put 'student','1001','info:sex','male'
put 'student','1001','info:age','18'
put 'student','1002','info:sex','female'
put 'student','1002','info:age','20'
3.扫描查看表数据:
scan 'student' --全表,表的内容多时慎用
scan 'student',{STARTROW => '1001', STOPROW => '1001'} --开始和结束区间
scan 'student',{STARTROW => '1001'} -- 单区间
4.查看表结构
describe ‘student’
5.更新指定字段的数据
put 'student','1001','info:age','100' ,更新后如果不设置多版本,只会保留最新的一个数据
6.查看“指定行”或“指定列族:列”的数据
get 'student','1001'
get 'student','1001','info:name'
7.统计表数据行数
count 'student'
8.删除数据
删除某rowkey的全部数据:deleteall 'student','1001'
删除某rowkey的某一列数据:delete 'student','1002','info:sex'
9.清空表数据
truncate 'student' 提示:清空表的操作顺序为先disable,然后再truncate。
10.删除表
首先需要先让该表为disable状态:disable 'student',然后才能drop删除:drop 'student'
提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.
11.变更表信息:
将info列族中的数据存放3个版本:
alter 'student',{NAME=>'info',VERSIONS=>3}
12. 获取多个版本信息
get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}