1、Hbase数据模型:
①位置:Hbase中的数据存储在表中;
②表:Hbase的表是schema less表,没有字段的定义和约束类型;
③表中数据:Hbase的表中数据是以Key-Value的形式存储的,以Key的首字母字典顺序排列;
④Key:一个完整的Key,包含:rowkey(主键)、列族(column family)、qualifier(属性)、timeStamp(时间戳);
⑤Value:一个Value本质上是一个任意数据序列化之后的二进制字节数组;
⑥表的纵向划分:Hbase的表在纵向上划分为列族;
⑦表的横向划分:Hbase的表在横向上划分为Region;
⑧Region:Hbase中表的行范围数据;Region划分按照数据量的大小,一个region只能交给一个RegionServer进行管理,但是一个RegionServer可以有同时管理多个Region。
2、Hbase的物理存储模型:
①数据存储形式:Hbase表中的数据是以Key-Value的形式存储的;
②不同Region的数据在HDFS中存储在不同的目录中;
③同一个Region中不同的列族的数据在不同目录中。
3、Hbase的分布式机制:
①HMaster和HRegionServer之间的协调感知通过ZooKeeper进行;
②一个表会被分成多个Region被RegionServer管理;
③一个Region中的数据一旦增长到一个阈值,会被RegionServer分裂为两个Region(开始默认一个Region,或者创建时进行预分Region,减少插入热点问题)。
4、Hbase默认保留版本号:
以前三个版本,现在默认保留一个版本({VERSIONS=1})
5、数据插入Hbase的几种方式:
(1)put:
①一次一次的put,或者将每次生成的put放入list集合中;
②一行数据,请求一次(RPC请求);Hbase每次都需要进行 处理,数量庞大,效率低下。
(2)缓存插入(mutation):
①批量插入,数据到达一定的阈值之后请求一次(RPC请求);
②效率有提高,但是还是要进行RPC请求,Hbase也需要进行大量处理,治标不治本。
(3)bulkload方式:
bulkload:将静态的文件生成hflie文件,加载(load)到指定目录下。
两种方式:
①操作shell脚本,转换csv文件为hfile文件–>importTsv工具;
②操作用MR程序,转换普通文件为hfile文件,直接将数据导入到hbase的表中。
注意事项:
①利用MR程序导入数据,需要提前设计好rowkey,同时需要考虑查询热点问题(导入数据,不存在插入(put)热点问题);
②为方便排序,主键需要统一长度;
③操作时,主键不能重复,不然可能会出现后面的主键覆盖前面的,一般在选定好的key后加上时间戳保证不重复的主键;
④选择主键时,考虑到查询速度最快,需要按照业务需求(如:用户最喜欢用的词)进行选择。