HBase-操作命令详解

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。接下来记录一下HBase的一些基本的使用:

基本命令

  • 在Hbase安装目录下的bin目录,执行如下命令,进入交互式环境:
./hbase shell
  • 退出交互式环境
quit

通用命令

  • status:HBase的状态,例如服务器的数量
hbase(main):001:0> status
1 active master, 1 backup masters, 2 servers, 0 dead, 1.0000 average load
  • version:获取正在使用的HBase版本
hbase(main):002:0> version
1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
  • table_help:表引用命令提供帮助
hbase(main):003:0> table_help
Help for table-reference commands.

You can either create a table via 'create' and then manipulate the table via commands like 'put', 'get', etc.
See the standard help information for how to use each of these commands.
...
  • whoami:提供有关用户的信息
hbase(main):004:0> whoami
root (auth:SIMPLE)
    groups: root

数据定义语言

  • create:创建表
# test为表名,cf为列族
create 'test','cf'
  • list:列出HBase的所有表
list
  • disable:禁用表
disable 'test'
  • is_disabled:验证表是否被禁用
is_disabled 'test'
  • enable: 启用表
enable 'test'
  • is_enabled:验证表是否被启用
is_enabled 'test'
  • describe:提供了一个表的描述
describe 'test'
  • alter:修改表结构
# 添加一个列族df
alter 'test','df'
  • exists:验证表是否存在
exists 'test'
  • drop:删除表,需先禁用才能删除
drop 'test'
  • disable_all:禁用多个表
# 禁用表明以te开头的所有表
disable_all 'te.*'
  • drop_all:删除多个表,需先禁用才能删除
# 删除表明以te开头的所有表
drop_all 'te.*'
  • Java Admin API:在此之前所有的上述命令,Java提供了一个通过API编程来管理实现DDL功能

数据操纵语言

  • put:插入数据
# 'test'表名,'row1'行,'cf:a'列(由列族加冒号再拼接一个后缀形成),value值
put 'test','row1','cf:a','value'
  • get:获取数据
# 获取row1行的所有数据
get 'test','row1'

# 获取row1行,cf:a列的数据
get 'test','row1','cf:a'
  • delete:删除表中单元格的数据
# 删除row1行,cf:a列的数据
delete 'test','row1','cf:a'
  • deleteall:删除一行的数据
deleteall 'test','row1'
  • scan:扫描并返回表数据
scan 'test'
  • count:计数并返回表中行的数量
count 'test'
  • truncate:禁用、删除和重新创建一个具有默认选项的表。注意,该表必须先存在才能执行此操作!!!类似于清空表的数据
truncate 'test'
  • Java client API:在此之前所有上述命令,Java提供了一个客户端API来实现DML功能,CRUD(创建检索更新删除)操作更多的是通过编程,在org.apache.hadoop.hbase.client包下

HBase操作进阶

我们还可以在创建表的同时给这个表分配一个变量,通过这个表里来间接操作表:

  1. 创建表时,给表赋予一个变量:
t = create 'test','cf'
  1. 也可以给已存在的表赋予一个变量:
t = get_table 'test'
  1. 插入数据:
t.put 'row1','cf:a','value'
  1. 扫描数据:
t.scan
  1. 获取一个表的描述:
t.describe
  1. 禁用:
t.disable
  1. 删除:
t.drop

读写HBase配置

hbase(main):002:0> @shell.hbase.configuration.get('hbase.rpc.timeout')
=> "60000"

更改远程连接超时时间:

hbase(main):001:0> @shell.hbase.configuration.setInt('hbase.rpc.timeout',61010)
hbase(main):002:0> @shell.hbase.configuration.get('hbase.rpc.timeout')
=> "61010"

以命令读取并执行文件中HBase Shell的命令

我们可以将HBase Shell 命令输入到文本文件当中,每一行为一个命令,假设有这样一个文件test

create 'user','cf'
put 'user','row1','cf:a','zhangsan'
scan 'user'

此时我们使用命令读取并执行这个文件中存储的命令,首先我们先进入到HBase的存放目录,进入bin目录,执行下面命令:

root@master:/usr/local/hbase/bin# ./hbase shell ~/test 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
0 row(s) in 3.0610 seconds

0 row(s) in 0.3280 seconds

ROW                                        COLUMN+CELL                                                                                                                 
 row1                                      column=cf:a, timestamp=1512723251727, value=zhangsan                                                                           
1 row(s) in 0.1680 seconds

可以看出,HBase执行了文件当中的命令

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值