HBase Shell操作和HBase API操作
一.HBase Shell操作
命名空间
--创建命名空间exam
create_namespace 'exam'
--显示命名空间
list_namespace
--显示exam命名空间的表
list_namespace_tables 'exam'
--删除命名空间exam
drop_namespace 'exam'
1.进入HBase客户端命令行
[hadoop@hadoop00 hbase]$ $HBASE_HOME/bin/hbase shell
2.查看帮助命令
hbase(main):001:0> help
3.查看当前数据库中有哪些表
hbase(main):002:0> list
4.创建表
create '[命名空间]:表名','列簇名1','列簇名2'
hbase(main):003:0>create 'customer',{NAME=>'addr'},{NAME=>'ordeer'}
NAME=>‘xxx’,xxx为列族的名字。HBase中创建一个表,必须指定至少一个列族。
列族对应HDFS上一个文件夹
5.插入数据到表
put '[命名空间]:表名','rowkey','列簇名1:列名','数据'
hbase(main):004:0>put 'customer','jsmith','addr:city','monthreal'
hbase(main):005:0>put 'customer','jsmith','addr:state','ON'
hbase(main):006:0>put 'customer','jsmith','order:numb','123456'
hbase(main):007:0>put 'customer','jsmith','order:date','2015-12-19'
插入数据后,到对应的列族目录下,发现没有对应的文件生成
就证明HBase 写入数据是没有直接落磁盘的,是先在缓冲中的。为了方便演示,可以手动刷出缓存,命令为 flush,在命令行输入 flush,会提示使用方法。
hbase(main):008:0> flush 'customer'
flush 完成后,可以看到对应的列族目录下,有数据文件了,该文件就是 HFile。
列族目录下的文件,可以尝试使用 hdfs 命令查看其内容,会发现是二进制的内容。HBase 提供了查看该文件内容的方式。
下面命令在 Linux 命令行执行,不是在 hbase shell 中
[root@hadoop00 ~]$ hbase hfile -v -p -f /hbase/data/default/customer/e3ee2da14c8b5f82f2035fc9fc283481/addr/8e1050e1df9842f0b15dc8fb2a7b50e4
#输出
K: r001/addr:city/1608264247929/Put/vlen=7/seqid=5 V: beijing
K: r001/addr:country/1608264351168/Put/vlen=5/seqid=6 V: china
K: r002/addr:city/1608264394006/Put/vlen=7/seqid=7 V: nanjing
K: roo3/addr:city/1608264967129/Put/vlen=7/seqid=9 V: nanjing
前面是 K,后面是 V,从这里也能看出 HBase 是 KeyValue 数据库
6.插入多行数据
put 'customer', 'jsmith', 'order:numb', '1235'
put 'customer', 'jsmith', 'order:numb', '1236'
put 'customer', 'jsmith', 'order:numb', '1237'
put 'customer', 'jsmith', 'order:numb', '1238'
put 'customer', 'njones', 'addr:city', 'miami'
put 'customer', 'njones', 'addr:state', 'FL'
put 'customer', 'njones', 'order:numb', '5555'
put 'customer', 'tsimmons', 'addr:city', 'dallas'
put 'customer', 'tsimmons', 'addr:state', 'TX'
put 'customer', 'jsmith', 'addr:city', 'denver'
put 'customer', 'jsmith', 'addr:state', 'CO'
put 'customer', 'jsmith', 'order:numb', '6666'
put