- 进入 hbase shell 命令行
- 查看帮助
- hbase shell 里面 字符串可以用 '' 或者 ""表示
- hbase的参数格式
- 命名空间操作(类似数据库)
- help "namespace" #查看命名空间相关命令用法
- list_namespace #查看有哪些命名空间
- create_namespace 命名空间名字 #创建命名空间
- drop_namespace 命名空间名字 #删除命名空间
- 表的操作
- help "ddl" #查看ddl相关命名
- hbase有两个自带命名空间 hbase 和 default
如果是default命名空间的表可以省略命名空间 - alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5} #修改表定义
- create "命名空间.表名","列族1","列族2" #创建一个表,有两个列族(简写)
- create "t1", {NAME => "f1", VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
创建一个表t1,创建列族f1,这个列族保留1个版本 - disable "ns1:t1" #禁用一个表
- enable "ns1:t1" #启用一个表
- drop "ns1:t1" #删除一个表(删除前必须要禁用)
- desc "ns1:t1" #查看表的结构
- truncate "ns1:t1" #清空一个表的数据
- exists "ns1.t1" #表是否存在
- list "goo.*" #查看指定看开头的表
- 表数据的操作
- help "dml" #查看dml相关命名
- put "表名","rowId","列族:列名","0003name" #添加数据(一次添加一个cell,一行数据需要多次添加)
put 可以添加也可以修改,修改实际就是添加一个新版本的数据 - get "表名","rowId" #查询指定行记录
- get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']} #查询的时候只查询只指定列族
- scan "goods",{STARTROW=>"开始ID",ENDROW=>"结束ID"} #扫描一个表(分页查询)
- scan "goods",{STARTROW=>"开始ID",LIMIT=>每页多少条} #分页查询
- scan "goods" #查询全部
- count "表名" #查看有多少条记录
- deleteall "表名", "rowId" #删除一条记录
- deleteall "表名", "rowId" ,"f1" #删除一个列族里面的数据
- incr "表名","rowId","列族:列名" #指定列自增(需要long类型才可以)
- incr "表名","rowId","列族:列名" ,10 #指定列自增10
- 列族属性
- NAME #列族名字
- VERSIONS #保留几个版本
默认0 - MIN_VERSIONS # 最小版本数
- IN_MEMORY # 激进缓存
- BLOOMFILTER # 布隆过滤器
- TTL #保存时间(s)
默认永久 - BLOCKCACHE #是否启用块缓存
- BLOCKSIZE # 数据块大小
默认64K - DATA_BLOCK_ENCODING # 数据块编码
- CONFIGURATION #
- COMPRESSION # 压缩方式
- NUMREGIONS #region的数量
- SPLITS_FILE #使用指定文件拆分region
- REGION_REPLICATION #region的副本数
- SPLITS #指定分区
- SPLITALGO #按照16进制分区
- OWNER #所属人
- 查看历史版本
- hbase里面的数据实际是不能修改的,修改实际是新增数据,并且保留指定version数量个版本.
超过version数量的版本会在合并数据的时候被删除. - 指定保存多少个版本是在列族上指定的
- 所以查询历史版本也是要指定到列族,不指定版本都是指显示最新的一个版本(时间最大的版本)
- delete 和 deleteall 的区别
- deleteall 删除的全部版本数据,
deleteall 可以删除整行数据,也可以删除指定列族或者列的数据 - delete 删除最新的版本
版本是定义在列族上面的,所以不能删除行,只能删除列数据,并且删除列族也无效
- rowkey的设计建议
- hbase的一些控制参数
- 设置合理的zookeeper回话超时时间
hbase-site.xml
- 设置合理的regionServer连接数
hbase-site.xml
- 设置大合并的时间
hbase-site.xml
- 设置合适的Hstore文件大小
hbase-site.xml
- 客户端缓存大小,缓存可以提高写效率
hbase-site.xml
- scan.next所获取的行数限制
hbase-site.xml
- 读写缓存比例(读写内存和建议不要超
- 过超过80%)
hbase-site.xml
- hbase 和jvm有直接关系,hbase regionServer一般有80%的内存是个读写缓存的,剩下的20%是程序自己用jvm可以更具这方面优化,比如使用并行回收减少STW的时间,因为写缓存很多时间都在积累数据,所以回收效率比较低(刷写数据以后才能回收),读缓存和程序内存可以回收.
建议减少新生代的空间,尽早做小GC,而不是等数据量来着做大GC.
- 一些建议
- region 大小控制早10-50G
- cell的大小不要超过10M,小于100K的值有优化
- 使用mod(Medium-sized-object)不要超过50M
- 一张表的列族建议1-3个,不要设计太多列族,最好就一个,多个列族建议存放不需要同时读取的数据
- 列族名称要短,每个cell列名都会占用空间
- 如果只有一个列族用于写数据,那么写缓存不会占用太多资源,所以可以把写缓存比例调小