一)、

1.namespace  //相当于databases
namespace        databases
-》tables    》tables
默认情况下有两个命令空间
》default
默认不指定命令空间的表都放在此命令空间下
》hbase
meta          //存放元数据
namespace     //存放命令空间



2.hbase 使用help

//查看命令的信息
hbase(main):007:0> help
//查看指定命令的用法  help   “COMMANDS” 
hbase(main):007:0> help "list_namespace"
eg:
hbase> list_namespace
   hbase> list_namespace 'abc.*'



  3.创建命名空间


hbase> create_namespace 'ns1'

  方式一(简写方式)

   create 'ns1:t1','cf1'

    方式二  //相互等同

create  'ns1:t2' ,{NAME => 'F1'}


    //查看某个命令空间下的表
    list_namespace_tables   'hbase'
    TABLE         meta



   4.SPLITS  //指定预分区

   创建表时,多创建一些region(根据表的数据RowKey,结合业务)

   region划分于rowkey,


  

hbase rename hbase rename table_创建表


    1)创建表时指定预分区

 

create  'ns1:jindong','info',SPLITS => ['201606010900', '201609010900', '201612010900']

    结合Web界面理解



    2)创建表时通过文本指定预分区   类似于 hive -f

 

create  'ns1:taobao','info',SPLITS_FILE => '/home/user01/splits.txt'



    3) create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}



   5 RowKey的设计

    1)rowkey是唯一的,不能重复 

2)rowkey的长度不超过10-100个字节,实际生产环境中不建议超过8-16个字节

    3)符合业务需求,而且尽量满足更多的业务(这个是重点,可以将一行信息中多个字段合并成一个ROWKEWY,后面查询主要通过ROWkey,可以进行一定的过滤和切割)

    4).避免数据热点【散列原则】



    ##解决方案一:【散列原则】

    生成一个在一定范围内的随机rowkey

    ##解决方案二:字符串反转

    手机号

    反转之前反转之后

    134....0  0

    151....1    1

    171....5        2

    188....7        9

 切分rowkey( 3 5 7 8) 切分rowkey( 0~9)



  6.创建带有多个版本号的表(可以有效的控制过期数据内存占有率)

create 'ns1:t2', {NAME => 'cf1', VERSIONS => 5}
   put 'ns1:t2','rk01','cf1:name','zhaoliyin'
   get 'ns1:t2','rk01',{COLUMN => 'cf1:name', VERSIONS => 5}
   COLUMN           CELL                                       
  cf1:name        timestamp=1483604304280, value=gaoyuanyuan 
  cf1:name        timestamp=1483604271409, value=yangmi      
  cf1:name        timestamp=1483604304280, value=zhaoli      
  cf1:name        timestamp=1483604235269, value=zhaoliyin

scan 'ns1:t2',{VERSIONS => 2}

scan 'ns1:t2',{TIMERANGE  => [1483604304280,1483604235269]}


7.修改失效时间

默认:TTL => 'FOREVER' 修改后:TTL => '20 SECONDS '

alter 'ns1:t2',{NAME => 'cf1',TTL => '20'}


8.修改列簇版本号

alter 'ns1:t2',{NAME => 'course',VERSIONS => '1'}



9.增加或删除表的列簇

增加一个列簇

alter 'ns1:t2',NAME => 'info',VERSION => '1'


删除一个列簇

alter 'ns1:t2',NAME => 'info', METHOD => 'delete'   或者 alter 'ns1:t2','delete' => 'info'



10.通过指定列族的IN_MEMORY=true属性,来让该列族的数据缓存在内存中,以提高查询性能。一些保存元数据的小表可以使用该属性来提升性能。

a.创建table的时候可以指定列族的属性

create 'test',{NAME => 'info',IN_MEMORY => true}

b.alter修改

alter 'ns1:t2',{NAME => 'course',IN_MEMORY => 'true'}




.在shell环境中导java包

eg:查看命令空间的创建时间

scan 'hbase:namespace'
 ROW               COLUMN+CELL                                     
  default          column=info:d, timestamp=1498708235968, value=\x
                   0A\x07default                                   
  hbase            column=info:d, timestamp=1498708236009, value=\x
                   0A\x05hbase                                     
  nsa              column=info:d, timestamp=1498724729409, value=\x
                   0A\x03nsa

import java.util.Date
Date.new(1498724729409).toString()


11.MIN_VERSIONS

TTL设定之后 MIN_VERSIONS=>'0' 这样设置之后,TTL时间戳过期后,将全部彻底删除该family 下所有的数据,如果MIN_VERSIONS 不等于0 那将保留最新

     的MIN_VERSIONS个版本的数据,其它的全部删除,比如MIN_VERSIONS=>'1' 届时将保留一个最新版本的数据,其它版本的数据将不再保存。