(1)启动:start-hbase.sh
根据启动信息,我们知启动吧顺序分别为:
- starting zookeeper
- starting master
- starting regionserver
(2)启动完成(如果启动成功)之后,我们使用 jps 查看 java 进程,会发现新增了三个java进程:
- HMaster
- HRegionServer
- HQuorumPeer
(3)浏览器端的启动方式,
hadoop0:60010
(hadoop0
表示的是主机名)
HBase Shell
HBase 提供的是对海量数据的简单秒级查询,体现在Shell 语句上就是异常简单的查询语句。
操作 | 命令表达式 |
---|---|
创建表 | create ‘表名称’, ‘列族名称1’, ‘列族名称2’, ‘列族名称n’ |
添加记录 | put ‘表名称’, ‘行名称’, ‘列名称’, ‘值’ 行名称即为行健(row key)或者我们理解的主键 行名称为进行查看的重要依据 |
查看记录 | get ‘表名称’, ‘行名称’ |
查看表中的记录总数 | count ‘表名称’ |
删除记录 | delete ‘表名’, ‘行名称’, ‘列名称’ |
删除一张表 | 先屏蔽,才可删除 (1)disable ‘表名称’ (2)drop ‘表名称’ |
查看所有记录 | scan ‘表名称’ |
查看某个表某个列中所有数据 | scan ‘表名称’, {COLUMNS=>’列组名称’:’列名称’} |
更新记录 | 重写即更新 |
注:
- (1)我们在进行 HBase 表定义时,指定的只是列族名,不需要指定列名。
- (2)
put
操作一次只能添加一个(行列确定的)单元格信息,然而 get 一次查询得到的却未必是一个单元的信息,如果过滤列族的话,则返回列族信息,如果过滤列族的某一列的话,则返回对应单元格的信息。
DDL 操作(DDL:Data Definition Language)
(1) 创建表:create ‘user’, ‘user_id’, ‘addr’, ‘info’
- a) 不以
;
号结尾 - b) 不管是表名,还是列族名,都要用单引号引起来
- a) 不以
(2) 列出全部表:list
(3) 得到表的描述:describe ‘user’
如果我们首先
disable 'user'
(自然使表生效的操作位enable user
),再显示表的描述信息的话,会发现第二栏的ENABLED
变为false
。虽然我们在学习时,将这些操作平等看待,然而在实践中,我们并不平等地使用这些操作,比如创建表、删除表(create、drop)都是十分谨慎的操作,尤其是删除,或许这也正是为什么删除一个表,需要两步动作。
DML 操作(DDL:Data Manipulation Language)
create 'users', 'user_id', 'address', 'info'
(1)添加记录(可以批量添加,不要分号结尾)
put 'users','xiaoming','info:age','24' put 'users','xiaoming','info:birthday','1987-06-17' put 'users','xiaoming','info:company','alibaba' put 'users','xiaoming','address:contry','china' put 'users','xiaoming','address:province','zhejiang' put 'users','xiaoming','address:city','hangzhou' put 'users','zhangyifei','info:birthday','1987-4-17' put 'users','zhangyifei','info:favorite','movie' put 'users','zhangyifei','info:company','alibaba' put 'users','zhangyifei','address:contry','china' put 'users','zhangyifei','address:province','guangdong' put 'users','zhangyifei','address:city','jieyang' put 'users','zhangyifei','address:town','xianqiao'
执行这么多次
put
操作,其实只添加了两个用户信息(‘xiaoming’、‘zhangyifei’)count 'users' # 2 row(s) in 0.0080 seconds
(2)获取一条记录
# 查询 xiaoming 的信息 get 'users', 'xiaoming' get 'users', 'xiaoming', 'address' # 过滤 address get 'users', 'xiaoming', 'address:city' # 过滤 address:city
(3)更新记录,请记住,覆盖即更新;
put 'users', 'xiaoming', 'info:age', '29' get 'users', 'xiaoming', 'info:age' put 'users', 'xiaoming', 'info:age', '30' get 'users', 'xiaoming', 'info:age'
(4)获取单元格数据的版本数据
get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>1} # 最新 get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>2} # 次新 get 'users', 'xiaoming', {COLUMN=>'info:age', VERSION=>3} # 最原始的记录
(5)获取单元格数据的某个版本数据
get 'users', 'xiaoming', { COLUMN=>'info:age', TIMESTAMP=>....}
(6)全表扫描
scan 'users'
(7)删除字段(单元格)
delete 'users', 'xiaoming', 'info:age' get 'users', 'xiaoming'
(8)删除整行
deleteall 'users', 'xiaoming'
(9)统计表的行数
count 'users'
(10)清空表
truncate 'users'