3.客户端操作
shell客户端
3.1HBase数据模型概念:
在hive表或者mysql表中说描述哪一个数据都是说的哪个库里面的哪张表里面的哪一行数据中的哪一列,才能定位到这个数据 但是在hbase中没有库的概念,说一个数据说的是哪一个名称空间下的那一张表下的哪一个行键的哪一个列族下面的哪一个列对应的是这个数据 |
namespace:doit
table:user_info
Rowkey |
Column Family1(列族) |
Column Family2(列族) |
||||||||||||
id |
Name |
age |
gender |
phoneNum |
address |
job |
code |
|||||||
rowkey_001 |
1 |
柳岩 |
18 |
女 |
88888888 |
北京.... |
演员 |
123 |
||||||
rowkey_002 |
2 |
唐嫣 |
38 |
女 |
66666666 |
上海.... |
演员 |
213 |
||||||
rowkey_003 |
3 |
大郎 |
8 |
男 |
44444444 |
南京.... |
销售 |
312 |
||||||
rowkey_004 |
4 |
金莲 |
33 |
女 |
99999999 |
东京.... |
销售 |
321 |
||||||
... |
||||||||||||||
namespace:hbase中没有数据库的概念 , 是使用namespace来达到数据库分类别管理表的作用
table:表,一个表包含多行数据
Row Key (行键):一行数据包含一个唯一标识rowkey、多个column以及对应的值。在HBase中,一张表中所有row都按照rowkey的字典序由小到大排序。
Column Family(列族):在建表的时候指定,不能够随意的删减,一个列族下面可以有多个列(类似于给列进行分组,相同属性的列是一个组,给这个组取个名字叫列族)
Column Qualifier (列):列族下面的列,一个列必然是属于某一个列族的行
Cell:单元格,由(rowkey、column family、qualifier、type、timestamp,value)组成的结构,其中type表示Put/Delete操作类型,timestamp代表这个cell的版本。KV结构存储,其中rowkey、column family、qualifier、type以及timestamp是K,value字段对应KV结构的V。
Timestamp(时间戳):时间戳,每个cell在写入HBase的时候都会默认分配一个时间戳作为该cell的版本,用户也可以在写入的时候自带时间戳。HBase支持多版本特性,即同一rowkey、column下可以有多个value存在,这些value使用timestamp作为版本号,版本越大,表示数据越新。
3.2进入客户端命令:
Shell |
3.3命令大全
3.3.1通用命令
status: 查看HBase的状态,例如,服务器的数量。
Shell |
version: 提供正在使用HBase版本。
Shell |
table_help: 表引用命令提供帮助。
Shell |
whoami: 提供有关用户的信息。
Shell |
3.3.2命名空间相关命令
list_namespace:列出所有的命名空间
Shell |
create_namespace:创建一个命名空间
Shell |
describe_namespace:描述一个命名空间
Shell |
drop_namespace:删除一个命名空间
Shell |
alter_namespace:修改namespace其中属性
Shell |
list_namespace_tables:列出一个命名空间下所有的表
Shell |
3.3.3DDL相关命令
list:列举出默认名称空间下所有的表
Shell |
create:建表
Shell |
drop:删除表
Shell |
drop_all:丢弃在命令中给出匹配“regex”的表
Shell |
disable:禁用表
Shell |
disable_all:禁用在命令中给出匹配“regex”的表
Shell |
enable:启用表
Shell |
enable_all:启用在命令中给出匹配“regex”的表
Shell |
is_enabled:判断该表是否是启用的表
Shell |
is_disabled:判断该表是否是禁用的表
Shell |
describe:描述这张表
Shell |
alter:修改表里面的属性
Shell |
alter_async:直接操作不等待,和上面的alter功能一样
Shell |
alter_status:获取alter命令的执行状态
Shell |
list_regions:列出一个表中所有的region
Shell |
locate_region:通过表名和row名方式获取region
Shell |
show_filters:显示hbase的所有的过滤器
Shell |
3.3.4DML相关命令
put插入/更新数据【某一行的某一列】(如果不存在,就插入,如果存在就更新)
Shell |
get:获取一个列族中列这个cell
Shell |
scan:扫描表中的所有数据
Shell |
incr:一般用于自动计数的,不用记住上一次的值,直接做自增
Shell |
count:统计一个表里面有多少行数据
Shell |
delete删除某一行中列对应的值
Shell |
deleteall:删除一行数据
Shell |
append:追加,假如该列不存在添加新列,存在将值追加到最后
Shell |
truncate:清空表里面所有的数据
Shell |
truncate_preserve:清空表但保留分区
Shell |
get_counter:获取计数器
Shell |
get_splits:用于获取表所对应的region数个数
Shell |
尖叫总结:实际生产中很少通过hbase shell去操作hbase,更多的是学习测试,问题排查等等才会使用到hbase shell ,hbase总的来说就是写数据,然后查询。 前者是通过API bulkload等形式写数据,后者通过api调用查询。 |
java客户端
3.4导入maven依赖
XML |
获取hbase的连接,list出所有的表
Java |
获取到所有的命名空间
Java |
创建一个命名空间
Java |
创建带有多列族的表
Java |
向表中添加数据
Java |
get表中的数据
Java |
scan表中的数据
Java |
删除一行数据
Java |
Hbase的客户端操作特别的麻烦 .
使用JAVA客户端连接也是特别麻烦的一个.代码输入繁琐 不好记忆
越往后学习会发现前面的内容对后面也非常的重要 . 比如JAVA的内容学习会用影响到会面使用,特别像这种需要建立连接内容的 . 将其他的服务端连接到JAVA .
细水长流 , 前面的内容会直接的影响后面的使用 . 特别是像我这种记性特别差 . 学了就忘的人 . 经常的整理笔记,写Xmind (思维导图) 加深映像 .