一 基本命令 打开Hbase Shell:
1.1 获取帮助
1.2 查看服务器状态
1.3 查看版本信息
二 表的管理 1 进入hbase shell console 1 $HBASE_HOME /bin/ hbase shell
如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户
2 查看有哪些表
3 创建表 1 2 3 4 5 语法:create <table >, {NAME => <family >, VERSIONS => <VERSIONS>} 例如:创建表t1,有两个family name :f1,f2,且版本数均为2 hbase(main)> create 't1' ,{NAME => 'f1' , VERSIONS => 2 },{NAME => 'f2' , VERSIONS => 2 }
创建表t1,列族为f1,列族版本号为5,命令如下
1 hbase (main) :002 :0 > create 't1' ,{NAME=>'f1' ,VERSIONS=>5 }
或者使用如下等价的命令
1 hbase (main) :003 :0 > create 't2' ,'f1' ,'f2' ,'f3'
创建表t1,将表依据分割算法HexStringSplit分布在15个Region里,命令如下:
1 hbase(main):006 :0 * create 't3' ,'f1' ,{NUMREGIONS=>15 ,SPLITALGO=>'HexStringSplit' }
创建表t1,指定切分点,命令如下:
1 hbase (main) :007 :0 > create 't4' ,'f1' ,{SPLITS=>['10' ,'20' ,'30' ,'40' ] }
put:向表/行/列指定的单元格添加数据
向表t1中行row1,列f1:1,添加数据value1,时间戳为14222222222,命令如下:
1 hbase (main) :009 :0 > put 't1' ,'row1' ,'f1:1' ,'value1' ,55555434344
4 删除表 分两步:首先disable,然后drop,例如:删除表t1
1 2 hbase (main) > disable 't1' hbase (main) > drop 't1'
5 查看表的结构 1 2 3 语法:describe <table > 例如:查看表t1的结构 hbase(main)> describe 't1'
6 修改表结构 1 2 3 4 5 6 7 修改表结构必须先disable 语法:alter 't1' , {NAME => 'f1' }, {NAME => 'f2' , METHOD => 'delete' } 例如:修改表test1的cf的TTL为180 天 hbase(main)> disable 'test1' hbase(main)> alter 'test1' ,{NAME =>'body' ,TTL=>'15552000' },{NAME =>'meta' , TTL=>'15552000' } hbase(main)> enable 'test1'
7 表的启用/禁用 enable和disable可以启用/禁用这个表,is_enabled和is_disabled来检查表是否被禁用
1 2 3 4 5 6 7 8 disable 'Student' is_disabled 'Student' enable 'Student' is_enabled 'Student'
8 检查表是否存在
9 列族管理 9.1 添加列族 命令格式 : alter ‘表名’, ‘列族名’
1 alter 'Student' , 'teacherInfo'
9.2 删除列族 命令格式 :alter ‘表名’, {NAME => ‘列族名’, METHOD => ‘delete’}
1 alter 'Student' , {NAME => 'teacherInfo' , METHOD => 'delete' }
9.3 更改列族存储版本的限制 默认情况下,列族只存储一个版本的数据,如果需要存储多个版本的数据,则需要修改列族的属性。修改后可通过desc
命令查看。
1 alter 'Student' ,{NAME=>'baseInfo' ,VERSIONS=>3 }
9.4 获取指定行、指定行中的列族、列的信息 1 2 3 4 5 6 get 'Student' ,'rowkey3' get 'Student' ,'rowkey3' ,'baseInfo' get 'Student' ,'rowkey3' ,'baseInfo:name'
三 权限管理 1 分配权限 1 2 3 4 5 语法 : grant <user > <permissions> <table > <column family > <column qualifier> 参数后面用逗号分隔权限用五个字母表示: "RWXCA". READ ('R' ), WRITE ('W' ), EXEC('X' ), CREATE ('C' ), ADMIN ('A' )例如,给用户‘test'分配对表t1有读写的权限, hbase(main)> grant ' test',' RW',' t1'
2 查看权限 1 2 3 语法:user_permission <table> 例如,查看表t1的权限列表 hbase (main) > user_permission 't1'
3 收回权限 1 2 3 与分配权限类似,语法:revoke <user > <table > <column family > <column qualifier> 例如,收回test用户在表t1上的权限 hbase(main)> revoke 'test' ,'t1'
四 表数据的增删改查 1 添加数据 1 2 3 4 语法:put <table >,<rowkey>,<family :column >,<value >,<timestamp > 例如:给表t1的添加一行记录:rowkey是rowkey001,family name :f1,column name :col1,value :value01,timestamp :系统默认 hbase(main)> put 't1' ,'rowkey001' ,'f1:col1' ,'value01' 用法比较单一。
2 查询某行记录 1 2 3 4 5 6 7 语法:get <table>,<rowkey>,[<family:column>,....] 例如:查询表t1,rowkey001中的f1下的col1的值 hbase (main) > get 't1' ,'rowkey001' , 'f1:col1' 或者: hbase (main) > get 't1' ,'rowkey001' , {COLUMN=>'f1:col1' }查询表t1,rowke002中的f1下的所有列值 hbase (main) > get 't1' ,'rowkey001'
3 扫描表 1 2 3 4 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num } 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能 例如:扫描表t1的前5 条数据 hbase(main)> scan 't1' ,{LIMIT=>5 }
4 查询表中的数据行数 1 2 3 4 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum} INTERVAL设置多少行显示一次及对应的rowkey,默认1000 ;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度 例如,查询表t1 中的行数,每100 条显示一次,缓存区为500 hbase(main)> count 't1' , {INTERVAL => 100 , CACHE => 500 }
五 删除数据 1 删除行中的某个列值 1 2 3 4 语法:delete <table >, <rowkey>, <family :column > , <timestamp >,必须指定列名 例如:删除表t1,rowkey001中的f1:col1的数据 hbase(main)> delete 't1' ,'rowkey001' ,'f1:col1' 注:将删除改行f1:col1列所有版本的数据
2 删除行 1 2 3 语法:deleteall <table >, <rowkey>, <family :column > , <timestamp >,可以不指定列名,删除整行数据 例如:删除表t1,rowk001的数据 hbase(main)> deleteall 't1' ,'rowkey001'
3 删除表中的所有数据 1 2 3 4 5 语法: truncate <table > 其具体过程是:disable table -> drop table -> create table 例如:删除表t1的所有数据 hbase(main)> truncate 't1'
六 查询 hbase中访问数据有两种基本的方式:
按指定rowkey获取数据:get方法;
按指定条件获取数据:scan方法。
scan
可以设置begin和end参数来访问一个范围内所有的数据。get本质上就是begin和end相等的一种特殊的scan。
6.1 Get查询 1 2 3 4 5 6 get 'Student' ,'rowkey3' get 'Student' ,'rowkey3' ,'baseInfo' get 'Student' ,'rowkey3' ,'baseInfo:name'
6.2 查询整表数据
6.3 查询指定列簇的数据 1 scan 'Student' , {COLUMN=>'baseInfo' }
6.4 条件查询 1 2 scan 'Student' , {COLUMNS=> 'baseInfo:birthday' }
除了列(COLUMNS)
修饰词外,HBase还支持Limit
(限制查询结果行数),STARTROW
(ROWKEY
起始行,会先根据这个key
定位到region
,再向后扫描)、STOPROW
(结束行)、TIMERANGE
(限定时间戳范围)、VERSIONS
(版本数)、和FILTER
(按条件过滤行)等。
如下代表从rowkey2
这个rowkey
开始,查找下两个行的最新3个版本的name列的数据:
1 scan 'Student' , {COLUMNS => 'baseInfo :name',STARTROW => 'rowkey2' ,STOPROW => 'wrowkey4' ,LIMIT =>2 , VERSIONS =>3 }
6.5 条件过滤 Filter可以设定一系列条件来进行过滤。如我们要查询值等于24的所有数据:
1 scan 'Student' , FILTER =>"ValueFilter(=,'binary:24')"
值包含yale的所有数据:
1 scan 'Student' , FILTER =>"ValueFilter(=,'substring:yale')"
列名中的前缀为birth的:
1 scan 'Student' , FILTER =>"ColumnPrefixFilter('birth')"
FILTER中支持多个过滤条件通过括号、AND和OR进行组合:
1 2 scan 'Student' , FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter ValueFilter(=,'substring:1998')"
PrefixFilter
用于对Rowkey的前缀进行判断:
1 scan 'Student' , FILTER =>"PrefixFilter('wr')"
七 Region管理 1 移动region 1 2 3 4 语法:move 'encodeRegionName', 'ServerName' encodeRegionName指的regioName后面的编码,ServerName指的是master- status的Region Servers列表 示例 hbase( main) >move '434399 5a58be8e5bbc739af1e91cd72d', 'db-41.xxx.xxx.org,6002 0,139027451673 9'
2 开启/关闭region 1 2 语法:balance_switch true |false hbase (main) > balance_switch
3 手动split 1 语法:split 'regionName' , 'splitKey'
4 手动触发major compaction 1 2 3 4 5 6 7 8 9 语法: Compact all regions in a table: hbase> major_compact 't1' Compact an entire region: hbase> major_compact 'r1' Compact a single column family within a region: hbase> major_compact 'r1' , 'c1' Compact a single column family within a table: hbase> major_compact 't1' , 'c1'