HBase高手之路4-Shell操作

Posted W_chuanqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase高手之路4-Shell操作相关的知识,希望对你有一定的参考价值。

文章目录


HBase高手之路3—HBase的shell操作

一、hbase的shell命令汇总

命令功能
create创建表
put插入或者更新数据
get获取限定行或者列的数据
scan全表扫描或扫描表并返回表的数据
describe查看表的结构
count统计行数
delete删除指定的行或列的数据
deleteall删除整个行或者列的数据
truncate删除表的数据,结构还在
drop删除整个表(包括数据)

二、需求

有以下的订单数据,需要将其保存在HBase中

订单id订单状态支付金额支付方式用户id操作时间商品分类
001已付款189.511000012023-3-6 9:10:24手机

三、表的操作

1.进入shell命令行

注意:需要提前启动 ZooKeeper、hdfs、hbase集群

2.创建表

命令格式:

create '表名','列簇名1'[,'列簇名2',...]

注意:create要小写,一个表可以有多个列簇

3.查看表的定义

命令格式:

describe '表名'

4.列出所有的表

命令格式:

list

5.删除表

1)禁用表

命令格式:

disable '表名'

2)启用表

命令格式:

enable '表名'

3)删除表

命令格式:

drop '表名'

注意:表处于启用状态时是无法删除的,若要删除表需要先禁用表,在进行删除。

四、数据的操作

1.添加数据

命令格式:

put '表名','rowkey行键','列簇名:列名',

依次添加其他的数据

注意:如果显示中文乱码,是因为hbase的shell中显示的是中文的十六进制编码,要解决中文乱码,需要添加选项,jrubby语法格式:

属性名=>属性值

如果有多个属性,中间用逗号格式

再次添加另一个rowkey的数据

2.获取(查看)数据

1)获取一行数据

命令格式:

get '表名','rowkey'

2)获取单个数据

命令格式:

get '表名','rowkey','列簇名:列名'

3.更新(修改)数据

命令格式:

put '表名','rowkey行键','列簇名:列名',新值

说明:

  • put命令如果键值存在则修改,如果不存在则添加
  • 在HBase中会自动维护表中数据的版本,即时间戳
  • 每执行一次put操作,都会生产一个新的时间戳

4.删除数据

1)删除指定列的数据

命令格式:

delete '表名','行键','列簇名:列名'

2)删除整行数据

命令格式:

deleteall '表名','行键'

3)清空表

命令格式:

truncate '表名'

五、导入数据

1.数据文件的准备

2.把数据文件上次到服务器

3.创建表,根据数据文件的定义

注意:集群启动

  1. 启动ZooKeeper
  2. 启动hdfs
  3. 启动HBASE
  4. 进入shell命令行
create 'ORDER_INFO' ,'C1'

4.执行命令导入命令数据文件

5.查看数据

此时,HBase的数据在HDFS上是的存储查看

六、计数操作

统计表中有多少条数据

1.计数命令

语法:

count '表名'

功能:统计rowkey不同的行数

注意:当数据量很大的时候,这个操作是比较耗时的

2.MR程序计数

当数据量很大很大的时候,可以通过HBase提供的MR程序进行计数,这个mr程序是

org.apache.hadoop.hbase.mapreduce.RowCounter,语法格式:

hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'

此时需启动yarn

启动计数命令

hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ORDER_INFO'

七、扫描操作

1.全表扫描

语法:
scan ‘表名’,FORMATTER=>‘toString’

注意:尽量避免全表扫描一张很大很大的表

2.限定记录数

语法:

scan ‘表名’,FORMATTER=>'toString',LIMIT=>数字

3.限定列

Rubby语法:

scan ‘表名’,FORMATTER=>'toString',COLUMNS=>[‘列簇名1:列名1,’列簇名1:列名2,...]
scan "ORDER_INFO",FORMATTER=>'toString',LIMIT=>3,COLUMNS=>['C1:CATEGORY','C1:PAY_MONEY']

4.限定rowkey

语法:

scan ‘表名’,FORMATTER=>'toString',ROWPREFIXFILTER=>’rowkey一部分’
scan "ORDER_INFO",FORMATTER=>'toString',COLUMNS=>['C1:CATEGORY','C1:PAY_MONEY'],ROWPREFIXFILTER=>'e'

八、HBase的过滤器

1.简介

在HBase中,如果要对海量的数据进行扫描查询,尤其是全表扫描效率很低,可以使用过滤器Filter来提高查询的效率。过滤器Filter可以根据主键、列簇、列、版本号(时间戳)等条件对数据进行查询过滤。

在HBase中,使用过滤器有两种方式,一种就是使用命令行基于jRubby语法的选项实现交互式查询,另一种是基于HBase的JAVA API的方式进行编程开发。

官网文档:https://hbase.apache.org/devapidocs/index.html

2.过滤器

可以通过show_filters命令,查看hbase内置的过滤器

我们来解释一下这些过滤器的用法:

类型过滤器功能
rowkey过滤器RowFilter实现行键字符串的比较和过滤
PrefixFilterrowkey的前缀过滤器
KeyOnlyFilter只对单元格的键过滤不显示值
FirstKeyOnlyFilter只扫描显示相同键的第一个单元格,其对应的键值会显示出来
列过滤器FamilyFilter列簇过滤器
QualifierFilter列限定符过滤器,只显示对应列簇列名的数据
ColumnPrefixFilter对列名的前缀进行限定
MultipleColumnPrefixFilter对多个列名的前缀进行限定
ColumnRangeFilter列名称范围的过滤器
值过滤器ValueFilter值过滤器,查询符合条件的键值对
SingleColumnValueFilter对单个值进行过滤
ColumnValueFilter列值的过滤器
SingleColumnValueExcludeFilter排除匹配成功的值
其他过滤器ColumnPaginationFilter列分页过滤器,返回offset、limit的列
PageFilter分页过滤器,分页显示
TimestampsFilter时间戳过滤器
ColumnCountGetFilter限制每个逻辑行返回值对的个数
DependentColumnFilter依赖列过滤器

3.过滤器的用法

过滤器一般结合scan来使用

scan "ORDER_INFO",FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"

一般语法:

scan ‘表名’,FILTER=>”过滤器的名称(参数列表(如比较运算符,比较器))

1)比较运算符

比较运算符是我们比较常见的。

运算符功能
=等于
>大于
<小于
>=大于等于
<=小于等于
!=不等于

2)比较器

比较器功能
BinaryComparator匹配完整的字节数组
BinaryPrefixComparator匹配字节数组的前缀
BitComparator匹配比特位
NullComparator匹配空值
RegexStringComparator匹配正则表达式
SubstringComparator匹配子字符串

3)比较器表达式

比较器表达式缩写
BinaryComparatorbinary:值
BinaryPrefixComparatorbinaryprefix:值
BitComparatorbit:值
NullComparatornull
RegexStringComparatorregexstring:正则表达式
SubstringComparatorsubstring:值

4.案例一:查询指定订单id的数据

1)需求

查询指定订单的数据,订单号为“e8b3bb37-1019-4492-93c7-305177271a71”,订单状态及支付方式

2)分析

  • 因为订单id就说表的rowkey,所以应该使用rowkey过滤器RowFilter

只需要两个参数

  • 比较运算符:=
  • 比较器表达式:binary:订单号

3)实现

scan 'ORDER_INFO',FORMATTER=>'toString',COLUMNS=>['C1:STATUS','C1:PAYWAY'],FILTER=>"RowFilter(=,'binary:e8b3bb37-1019-4492-93c7-305177271a71')"

5.案例二:查询状态为已付款的订单

1)需求

查询状态为已付款的订单

2)分析

  • 因为查询状态为已付款要查询指定值,所以应该使用值过滤器SingleColumnValueFilter

需要传入四个参数

  • 列簇
  • 列名
  • 比较运算符
  • 比较器表达式
scan 'ORDER_INFO',FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('c1','STATUS',=,'binary:已付款')"

注意:

  • 列簇名和列名大小写一定要写对
  • 如果列簇名和列名大小写写错并不能过滤数据,但是HBase不会报错,而是显示全部的数据,因为HBase是无模式的

6.案例三:组合多条件过滤1

1)需求

查询支付方式为1,且支付金额大于8000的订单

2)分析

  • 此处需要使用多个过滤器共同来实现查询,多个过滤器,可以使用AND(并且)或者OR(或者)来组合多个过滤器完成查询
  • 使用SingleColumnValueFilter实现对应列的查询
  1. 支付方式为1的过滤器
SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
  1. 支付金额大于8000的过滤器
SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')
  1. 完整的命令
scan 'ORDER_INFO', FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')"

注意:

  • HBase shell中比较默认都是字符串比较,所以如果是比较数值类型的,会出现不准确的情况
  • 例如:在字符串比较中4000是比100000大的
  • 外层必须使用双引号,内层使用单引号

我们还可以加上限定列:

scan 'ORDER_INFO', FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']

7. 案例四:组合多条件过滤2

1)需求

查询类别为“维修;手机;”或者“数码;女装;”,并且状态为“已付款”的订单,只显示类别和状态

2)分析

  • 此处需要使用多个过滤器组合使用,多个过滤器可以使用AND(并且)、OR(或者)来进行组合
  • 使用值过滤器中的SingleColumnValueFilter实现对应列值的查询

完整的命令

scan 'ORDER_INFO', FORMATTER => 'toString',FILTER => "(SingleColumnValueFilter('C1', 'CATEGORY', = , 'binary:维修;手机;') OR SingleColumnValueFilter('C1', 'CATEGORY', = , 'binary:数码;女装;')) AND SingleColumnValueFilter('C1', 'STATUS', =, 'binary:已付款')",COLUMNS=>['C1:CATEGORY','C1:STATUS']

8.作业

选择操作时间在2020-04-25,12点8分到9分之间的已完成的订单,只显示操作时间和状态

scan 'ORDER_INFO', FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'OPERATION_DATE', > , 'binary:2020-04-25 12:08:00') AND SingleColumnValueFilter('C1', 'OPERATION_DATE', = , 'binary:2020-04-25 12:09:00')",COLUMNS=>['C1:OPERATION_DATE','C1:STATUS']

九、INCR

incr(increament)命令可以实现某个单元格的值进行原子性计数累加,默认累加1

1. 需求

某新闻app应用为了统计每个新闻的每隔一段时间的访问次数,将新闻数据保存在HBase中,该表格的数据如下所示,要求原子性的增加新闻的访问次数

新闻ID访问次数时间段rowkey
00000000011200:00-01:000000000001_00:00-01:00
00000000022001:00-02:000000000002_01:00-02:00

2. incr操作

语法:

incr ‘表名’,‘rowkey’,‘列簇名:列名’,[累加值]

说明:

  • 如果某一列要实现计数功能,必须要使用incr来创建对应的列
  • 使用put创建的额列是不能实现累加的
  • 默认累加1

3.基本使用

4.导入准备好的数据

上传服务器

导入HBase

显示前5条数据

5.获取计数器值的命令

不能使用get来获取计数器的值

语法:

get_counter ‘表名’,‘rowkey’,‘列簇名:列名’

6.使用incr进行累加操作,修改计数器的值

十、Shell管理操作

1.status

查看服务器的状态

2.whoami

显示当前用户

3.list

显示当前的所有的表

4.count

统计表的记录数

5.describe

显示表的结构信息

6.exists

判断某个表是否存在

7.is_enabled、is_disabled

判断某个表是否被启用或者禁用

8.alter

改变表和列簇的模式

  • 新增列簇

  • 删除列簇

参考文章

HBASE官网文档

HBase学习之路 HBase集群Shell操作

进入HBase命令行

在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端

[[email protected] ~]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/apps/hbase-1.2.6/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/apps/hadoop-2.7.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter help<RETURN> for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017

hbase(main):001:0> 

 说明,先看一下提示。其实是不是有一句很重要的话:

HBase Shell; enter help<RETURN> for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell

讲述了怎么获得帮助,怎么退出客户端

help 获取帮助

  help:获取所有命令提示

  help "dml" :获取一组命令的提示

  help "put" :获取一个单独命令的提示帮助

exit 退出 hbase shell 客户端

HBase表的操作

 关于表的操作包括(创建create,查看表列表list。查看表的详细信息desc,删除表drop,清空表truncate,修改表的定义alter)

创建create

可以输入以下命令进行查看帮助命令

hbase(main):001:0> help ‘create‘
技术分享图片
 1 hbase(main):001:0> help create
 2 Creates a table. Pass a table name, and a set of column family
 3 specifications (at least one), and, optionally, table configuration.
 4 Column specification can be a simple string (name), or a dictionary
 5 (dictionaries are described below in main help output), necessarily 
 6 including NAME attribute. 
 7 Examples:
 8 
 9 Create a table with namespace=ns1 and table qualifier=t1
10   hbase> create ns1:t1, {NAME => f1, VERSIONS => 5}
11 
12 Create a table with namespace=default and table qualifier=t1
13   hbase> create t1, {NAME => f1}, {NAME => f2}, {NAME => f3}
14   hbase> # The above in shorthand would be the following:
15   hbase> create t1, f1, f2, f3
16   hbase> create t1, {NAME => f1, VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
17   hbase> create t1, {NAME => f1, CONFIGURATION => {hbase.hstore.blockingStoreFiles => 10}}
18   
19 Table configuration options can be put at the end.
20 Examples:
21 
22   hbase> create ns1:t1, f1, SPLITS => [10, 20, 30, 40]
23   hbase> create t1, f1, SPLITS => [10, 20, 30, 40]
24   hbase> create t1, f1, SPLITS_FILE => splits.txt, OWNER => johndoe
25   hbase> create t1, {NAME => f1, VERSIONS => 5}, METADATA => { mykey => myvalue }
26   hbase> # Optionally pre-split the table into NUMREGIONS, using
27   hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
28   hbase> create t1, f1, {NUMREGIONS => 15, SPLITALGO => HexStringSplit}
29   hbase> create t1, f1, {NUMREGIONS => 15, SPLITALGO => HexStringSplit, REGION_REPLICATION => 2, CONFIGURATION => {hbase.hregion.scan.loadColumnFamiliesOnDemand => true}}
30   hbase> create t1, {NAME => f1, DFS_REPLICATION => 1}
31 
32 You can also keep around a reference to the created table:
33 
34   hbase> t1 = create t1, f1
35 
36 Which gives you a reference to the table named t1, on which you can then
37 call methods.
38 hbase(main):002:0> 
View Code

可以看到其中一条提示

hbase> create t1, {NAME => f1}, {NAME => f2}, {NAME => f3}

其中t1是表名,f1,f2,f3是列簇的名,如:

hbase(main):002:0> create ‘myHbase‘,{NAME => ‘myCard‘,VERSIONS => 5}
0 row(s) in 3.1270 seconds

=> Hbase::Table - myHbase
hbase(main):003:0> 

创建了一个名为myHbase的表,表里面有1个列簇,名为myCard,保留5个版本信息

查看表列表list

可以输入以下命令进行查看帮助命令

hbase(main):003:0> help ‘list‘
List all tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:

  hbase> list
  hbase> list abc.*
  hbase> list ns:abc.*
  hbase> list ns:.*
hbase(main):004:0> 

直接输入list进行查看

hbase(main):004:0> list
TABLE                                                                                                           
myHbase                                                                                                         
1 row(s) in 0.0650 seconds

=> ["myHbase"]
hbase(main):005:0> 

只有一条结果,就是刚刚创建的表myHbase

查看表的详细信息desc

一个大括号,就相当于一个列簇。

hbase(main):006:0> desc ‘myHbase‘
Table myHbase is ENABLED                                                                                        
myHbase                                                                                                         
COLUMN FAMILIES DESCRIPTION                                                                                     
{NAME => myCard, BLOOMFILTER => ROW, VERSIONS => 5, IN_MEMORY => false, KEEP_DELETED_CELLS => FALSE, D
ATA_BLOCK_ENCODING => NONE, TTL => FOREVER, COMPRESSION => NONE, MIN_VERSIONS => 0, BLOCKCACHE => true
, BLOCKSIZE => 65536, REPLICATION_SCOPE => 0}                                                               
1 row(s) in 0.2160 seconds

hbase(main):007:0> 

修改表的定义alter

添加一个列簇

hbase(main):007:0> alter ‘myHbase‘, NAME => ‘myInfo‘
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.0690 seconds

hbase(main):008:0> desc ‘myHbase‘
Table myHbase is ENABLED
myHbase
COLUMN FAMILIES DESCRIPTION
{NAME => ‘myCard‘, BLOOMFILTER => ‘ROW‘, VERSIONS => ‘5‘, IN_MEMORY => ‘false‘, KEEP_DELETED_CELLS => ‘FALSE‘, D
ATA_BLOCK_ENCODING => ‘NONE‘, TTL => ‘FOREVER‘, COMPRESSION => ‘NONE‘, MIN_VERSIONS => ‘0‘, BLOCKCACHE => ‘true‘
, BLOCKSIZE => ‘65536‘, REPLICATION_SCOPE => ‘0‘}
{NAME => ‘myInfo‘, BLOOMFILTER => ‘ROW‘, VERSIONS => ‘1‘, IN_MEMORY => ‘false‘, KEEP_DELETED_CELLS => ‘FALSE‘, D
ATA_BLOCK_ENCODING => ‘NONE‘, TTL => ‘FOREVER‘, COMPRESSION => ‘NONE‘, MIN_VERSIONS => ‘0‘, BLOCKCACHE => ‘true‘
, BLOCKSIZE => ‘65536‘, REPLICATION_SCOPE => ‘0‘}
2 row(s) in 0.0420 seconds

hbase(main):009:0>

删除一个列簇

hbase(main):009:0> alter ‘myHbase‘, NAME => ‘myCard‘, METHOD => ‘delete‘
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.1920 seconds

hbase(main):010:0> desc ‘myHbase‘
Table myHbase is ENABLED                                                                                        
myHbase                                                                                                         
COLUMN FAMILIES DESCRIPTION                                                                                     
{NAME => myInfo, BLOOMFILTER => ROW, VERSIONS => 1, IN_MEMORY => false, KEEP_DELETED_CELLS => FALSE, D
ATA_BLOCK_ENCODING => NONE, TTL => FOREVER, COMPRESSION => NONE, MIN_VERSIONS => 0, BLOCKCACHE => true
, BLOCKSIZE => 65536, REPLICATION_SCOPE => 0}                                                               
1 row(s) in 0.0290 seconds

hbase(main):011:0> 

删除一个列簇也可以执行以下命令

alter ‘myHbase‘, ‘delete‘ => ‘myCard‘

添加列簇hehe同时删除列簇myInfo

hbase(main):011:0> alter ‘myHbase‘, {NAME => ‘hehe‘}, {NAME => ‘myInfo‘, METHOD => ‘delete‘}
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.8260 seconds

hbase(main):012:0> desc ‘myHbase‘
Table myHbase is ENABLED                                                                                        
myHbase                                                                                                         
COLUMN FAMILIES DESCRIPTION                                                                                     
{NAME => hehe, BLOOMFILTER => ROW, VERSIONS => 1, IN_MEMORY => false, KEEP_DELETED_CELLS => FALSE, DAT
A_BLOCK_ENCODING => NONE, TTL => FOREVER, COMPRESSION => NONE, MIN_VERSIONS => 0, BLOCKCACHE => true, 
BLOCKSIZE => 65536, REPLICATION_SCOPE => 0}                                                                 
1 row(s) in 0.0410 seconds

hbase(main):013:0> 

清空表truncate                                                                                    

hbase(main):013:0> truncate myHbase
Truncating myHbase table (it may take a while):
 - Disabling table...
 - Truncating table...
0 row(s) in 3.6760 seconds

hbase(main):014:0> 

删除表drop

hbase(main):014:0> drop ‘myHbase‘

ERROR: Table myHbase is enabled. Disable it first.

Here is some help for this command:
Drop the named table. Table must first be disabled:
  hbase> drop t1
  hbase> drop ns1:t1


hbase(main):015:0> 

直接删除表会报错,根据提示需要先停用表

hbase(main):015:0> disable ‘myHbase‘
0 row(s) in 2.2620 seconds

hbase(main):016:0> drop ‘myHbase‘
0 row(s) in 1.2970 seconds

hbase(main):017:0> list
TABLE                                                                                                           
0 row(s) in 0.0110 seconds

=> []
hbase(main):018:0> 

HBase表中数据的操作

关于数据的操作(增put,删delete,查get + scan,  改==变相的增加)

创建 user 表,包含 info、data 两个列簇

hbase(main):018:0> create ‘user_info‘,{NAME=>‘base_info‘,VERSIONS=>3 },{NAME=>‘extra_info‘,VERSIONS=>1 } 
0 row(s) in 4.2670 seconds

=> Hbase::Table - user_info
hbase(main):019:0> 

增put

查看帮助,需要传入表名,rowkey,列簇名、值等

hbase(main):019:0> help ‘put‘
Put a cell value at specified table/row/column and optionally
timestamp coordinates.  To put a cell value into table ns1:t1 or t1
at row r1 under column c1 marked with the time ts1, do:

  hbase> put ns1:t1, r1, c1, value
  hbase> put t1, r1, c1, value
  hbase> put t1, r1, c1, value, ts1
  hbase> put t1, r1, c1, value, {ATTRIBUTES=>{mykey=>myvalue}}
  hbase> put t1, r1, c1, value, ts1, {ATTRIBUTES=>{mykey=>myvalue}}
  hbase> put t1, r1, c1, value, ts1, {VISIBILITY=>PRIVATE|SECRET}

The same commands also can be run on a table reference. Suppose you had a reference
t to table t1, the corresponding command would be:

  hbase> t.put r1, c1, value, ts1, {ATTRIBUTES=>{mykey=>myvalue}}
hbase(main):020:0> 

 向 user 表中插入信息,row key 为 user0001,列簇 base_info 中添加 name 列标示符,值为 zhangsan1

hbase(main):020:0> put ‘user_info‘, ‘user0001‘, ‘base_info:name‘, ‘zhangsan1‘
0 row(s) in 0.2900 seconds

hbase(main):021:0> 

此处可以多添加几条数据

技术分享图片
put user_info, zhangsan_20150701_0001, base_info:name, zhangsan1
put user_info, zhangsan_20150701_0002, base_info:name, zhangsan2
put user_info, zhangsan_20150701_0003, base_info:name, zhangsan3
put user_info, zhangsan_20150701_0004, base_info:name, zhangsan4
put user_info, zhangsan_20150701_0005, base_info:name, zhangsan5
put user_info, zhangsan_20150701_0006, base_info:name, zhangsan6
put user_info, zhangsan_20150701_0007, base_info:name, zhangsan7
put user_info, zhangsan_20150701_0008, base_info:name, zhangsan8

put user_info, zhangsan_20150701_0001, base_info:age, 21
put user_info, zhangsan_20150701_0002, base_info:age, 22
put user_info, zhangsan_20150701_0003, base_info:age, 23
put user_info, zhangsan_20150701_0004, base_info:age, 24
put user_info, zhangsan_20150701_0005, base_info:age, 25
put user_info, zhangsan_20150701_0006, base_info:age, 26
put user_info, zhangsan_20150701_0007, base_info:age, 27
put user_info, zhangsan_20150701_0008, base_info:age, 28

put user_info, zhangsan_20150701_0001, extra_info:Hobbies, music
put user_info, zhangsan_20150701_0002, extra_info:Hobbies, sport
put user_info, zhangsan_20150701_0003, extra_info:Hobbies, music
put user_info, zhangsan_20150701_0004, extra_info:Hobbies, sport
put user_info, zhangsan_20150701_0005, extra_info:Hobbies, music
put user_info, zhangsan_20150701_0006, extra_info:Hobbies, sport
put user_info, zhangsan_20150701_0007, extra_info:Hobbies, music

put user_info, baiyc_20150716_0001, base_info:name, baiyc1
put user_info, baiyc_20150716_0002, base_info:name, baiyc2
put user_info, baiyc_20150716_0003, base_info:name, baiyc3
put user_info, baiyc_20150716_0004, base_info:name, baiyc4
put user_info, baiyc_20150716_0005, base_info:name, baiyc5
put user_info, baiyc_20150716_0006, base_info:name, baiyc6
put user_info, baiyc_20150716_0007, base_info:name, baiyc7
put user_info, baiyc_20150716_0008, base_info:name, baiyc8

put user_info, baiyc_20150716_0001, base_info:age, 21
put user_info, baiyc_20150716_0002, base_info:age, 22
put user_info, baiyc_20150716_0003, base_info:age, 23
put user_info, baiyc_20150716_0004, base_info:age, 24
put user_info, baiyc_20150716_0005, base_info:age, 25
put user_info, baiyc_20150716_0006, base_info:age, 26
put user_info, baiyc_20150716_0007, base_info:age, 27
put user_info, baiyc_20150716_0008, base_info:age, 28

put user_info, baiyc_20150716_0001, extra_info:Hobbies, music
put user_info, baiyc_20150716_0002, extra_info:Hobbies, sport
put user_info, baiyc_20150716_0003, extra_info:Hobbies, music
put user_info, baiyc_20150716_0004, extra_info:Hobbies, sport
put user_info, baiyc_20150716_0005, extra_info:Hobbies, music
put user_info, baiyc_20150716_0006, extra_info:Hobbies, sport
put user_info, baiyc_20150716_0007, extra_info:Hobbies, music
put user_info, baiyc_20150716_0008, extra_info:Hobbies, sport
View Code

查get + scan

获取 user 表中 row key 为 user0001 的所有信息

hbase(main):022:0> get user_info, user0001
COLUMN                        CELL                                                                              
 base_info:name               timestamp=1522320801670, value=zhangsan1                                          
1 row(s) in 0.1310 seconds

hbase(main):023:0> 

 

获取user表中row key为rk0001,info列簇的所有信息

hbase(main):025:0> get user_info, rk0001, base_info
COLUMN                        CELL                                                                              
 base_info:name               timestamp=1522321247732, value=zhangsan                                           
1 row(s) in 0.0320 seconds

hbase(main):026:0> 

查询user_info表中的所有信息

hbase(main):026:0> scan user_info
ROW                           COLUMN+CELL                                                                       
 rk0001                       column=base_info:name, timestamp=1522321247732, value=zhangsan                    
 user0001                     column=base_info:name, timestamp=1522320801670, value=zhangsan1                   
2 row(s) in 0.0970 seconds

hbase(main):027:0> 

查询user_info表中列簇为base_info的信息

hbase(main):027:0> scan user_info, {COLUMNS => base_info}
ROW                           COLUMN+CELL                                                                       
 rk0001                       column=base_info:name, timestamp=1522321247732, value=zhangsan                    
 user0001                     column=base_info:name, timestamp=1522320801670, value=zhangsan1                   
2 row(s) in 0.0620 seconds

hbase(main):028:0> 

删delete

删除user_info表row key为rk0001,列标示符为base_info:name的数据

hbase(main):028:0> delete ‘user_info‘, ‘rk0001‘, ‘base_info:name‘
0 row(s) in 0.0780 seconds

hbase(main):029:0> scan ‘user_info‘, {COLUMNS => ‘base_info‘}
ROW                           COLUMN+CELL                                                                       
 user0001                     column=base_info:name, timestamp=1522320801670, value=zhangsan1                   
1 row(s) in 0.0530 seconds

hbase(main):030:0> 

 

以上是关于HBase高手之路4-Shell操作的主要内容,如果未能解决你的问题,请参考以下文章

HBase学习之路 HBase的API操作

HBase学习之路 HBase表的设计原则

HBase眼高手低从Shell到IDEA编程心路笔记踩坑过程

京东7000+节点HBase集群平台化的演进之路

求高手指教hbase伪分布问题

hadoop生态系统学习之路hbase的简单使用