HBase Shell
- help命令的使用:help "command"
- 创建命名空间 create_namespace 'np_name'
- 创建表 create 'np_name:tb_name','column_family_name' //如果指定属性(每个列簇可以指定读个属性)需要加{NAME=>'f1'},{NAME=>'f2'}、、等价于create 'np_name:tb_name' 'f1','f2'
- HBase创建表的预分区:
- region的划分依赖于rowkey,预先评估rowkey;
- create 'table1' 'info',split=>['20151001000000','20151011000000','20151021000000']//创建4个分区
第一个分区(null——20151001000000)
二(20151001000000-20151011000000)
三(20151011000000-20151021000000)
四(20151021000000-null) - 另一种方法:创建split.txt
然后在创建的时候create 'table1' 'info',split=>'address/split.txt' - 第三种根据16机制字符串生成rowkey(不常用)
案例:联通通话记录
- 依据查询字段:Tel+time
- 需要的字段:tel、time、area、active、对方号码、通话时长talktime
- 如何设计表:核心:rowkey查询快
- rowkey:手机号码+通话时间
- scan startrow
1827872747447_201703240924
endrow
1827872747447_201703241024 - 实时性:如何在海量数据中快速查出需要的数据 ,核心思想:依据rowkey查询最快,对rowkey进行范围查询,前缀匹配
- 新需求:针对话单查询
- 索引表设计好rowkey;
- 列是主表的rowkey
主表和索引表数据如何同步
- 程序,事物
- Phoenix(在Nosql数据库上提供sql支持):JDBC方式才能同步
- solr
HBase表的属性:
- 查看:describe table_name
- 设置版本{version=>'1'}
- 压缩compression
配置hbase snappy压缩
- 配置Hadoop压缩
- 配置hbase 将Hadoop-snappy.jar 放入到lib目录;在lib目录下创建一个native目录,再将ln -s $hadoop/lib/native $hbase/lib/native/linux-amd64-64
重启
in_memery配置
blockcache配置每个regionserver只有一个blockcache
HBase表的compaction
- 当memstore中的数据不断刷写入磁盘中以后,Hfile越来越多,解决的方法是合并,分为minor合并和major合并,minor合并是将多个小文件重写为数量较少的大文件,减少存储文件的数量,实际上是多路归并的思想,所以合并速度快,major合并是将一个region中的一个列簇的若干个HFile重写为一个新的HFile,相比前者,还有更独特的功能,能扫描所有的键值对,顺序重写,重写中会忽略做过删除标记的数据,例如,那些超过版本号限制和生存时间到期的数据也会在此过程中不再重写
- 当合并文件达到单个文件的配置允许的最大值是会触发一个region的自动分割,region split成两个
- 轻量级minor合并:把符合条件的最早生成的几个storefile合并成一个大的storefile,不会标记删除的数据和过期的数据,并且还行这个操作后还会有多个storefile文件
- 重量级major合并:把所有的storefile合并成一个单一的storefile文件,在文件合并期间会删除标记为删除和过期的数据,同时会block(阻塞)所有客户端对该操作所属的region的请求知道合并完毕,最后删除已合并的storefile
HBase管理
- HBase admin管理 HBaseServer_name:60010
- 使用HBase shell管理表
- WAL tool
- HFile tool
- HBase hbck