赞
踩
分布式的数据库,它的本质是将数据存放在HDFS。它和Hive的最大区别就是,Hive的本质相当于封装了Mapreduce,HBase的本质相当于封装了HDFS。帮助我们存储一些非结构化的数据。他是一个Nosql的数据库。
使用场景:
1.海量非结构化或者结构化的数据的存储
2.需要实现近实时的读写管理的数据
1.client:hbase的客户端,使用shell命令或者API向HBase发出请求,并且客户端其实会缓存region的位置。
2.zookeeper:监控hmaster的状态,如果active的挂了,通知backup的master上位,存储所有region的寻址入口,监控regionserver的状态,并且通知hmaster,存储部分hbase的元数据
3.hmaster:为所有的hregionserver分配region,为regionserver做负载均衡,负责region的裂变,负责hdfs中的垃圾回收
4.regionserver:维护hmaster分配给他们的region,处理client发过来的读写请求,具体来执行负责切过大的region。
5.hlog:对hbase的读写操作,WAL的写数据保证数据安全
6.region:hbase中分布式存储的最小单位和负载均衡的最小单位,它表示表或者表的一部分
7.store:列簇
8.memstore:缓冲区,数据的写入先写入到缓冲区,然后再溢出到hdfs,默认128M
9.storefile:和hfile是同一种含义,不过storefile是逻辑上的名称,hfile是物理上的名称
create_namespace(创建一个命名空间)
类型1:create_namespace 'zxy'
类型2:create_namespace 'zxy',{'hbasename'=>'hadoop'}
list_namespace(列举当前有多少namespace)
类型1:list_namespace (显示全部namespace)
类型2:list_namespace 'zx*' (显示以zx开头的namespace)
describe_namespace(查看指定namespace的详情)
describe_namespace 'zxy'
list_namespace_tables(查看指定namespace中的所有table)
list_namespace_tables 'zxy'
drop_namespace(删除指定的namespace)
drop_namespace 'zxy'
alter_namespace(修改namespace的属性)
类型1:alter_namespace 'zxy',{METHOD=>'set','PROPERTY_NAME'=>'PROPERTY_VALUE'}
(添加,修改)
类型2:alter_namespace 'zxy',{METHOD=>'unset',NAME='PROPERTY_NAME'}
(删除)
建表(create)
类型1:create 'zxy:q1',{NAME=>'f1',VERSIONS=>5}
(表名为q1,列簇为f1,可以保存5个版本数据)
类型2:create 'q2', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
(同时创建多个列簇)
类型3:create 't1', 'f1', 'f2', 'f3'
(同上)
类型4: create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
(表示在默认namespace下创建t1表且列簇为f1,只能保存1个版本数据,表存活时间(TTL:Time to Live)259200毫秒,并且开启块缓存)
类型5:create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
(在建表的同时指定hbase的相关的配置信息)
删表
distable
disable 'zxy:q1'
is_disabled 'zxy:q1'
enable
enable 'zxy:q1'
is_enabled 'zxy:q1'
drop
只有当表的is_disabled 'zxy:q1'为true时才可以删除
hbase(main):079:0> drop 'q1'
ERROR: Table t1 is enabled. Disable it first.
hbase(main):081:0> disable 'q1'
0 row(s) in 2.2460 seconds
hbase(main):090:0> drop 'q1'
0 row(s) in 1.2540 seconds
查看表(list)
list 'zxy:.*'
查看表详情(desc/describe)
desc/describe命令:
hbase(main):097:0> describe 'zxy:q1'
Table ns1:t1 is ENABLED
ns1:t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FAL
SE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOC
KCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
1 row(s) in 0.0200 seconds
修改表(alter)
类型1:alter 'zxy:q1',NAME=>'f1',VERSSIONS=>1
(修改列簇的版本信息)
类型2:alter 'zxy:q1',NAME=>'f1',{NAME=>'f2',IN_MEMORY=>true},{NAME=>'f3',VERSIONS=>5}
(同时修改多个列簇,如果指定列簇不存在就添加,存在就修改)
类型3:alter 'zxy:q1','f1','f2','f3'
(使用默认属性,直接声明)
类型4:alter 'zxy:q1',NAME='f1',METHOD=>'delete'
类型4:alter 'zxy:q1','delete'=>'f1'
(删除列簇)
表是否存在(exists)
exists 'zxy:q1'
插入(put)
put 'zxy:q1','r1','f1:name','zxy'
(在表q1中插入一条数据)
获取(get)
类型1:get 'zxy:q1','r1'
(显示r1行的数据)
hbase(main):015:0> get 'zxy:q1', 'r1'
COLUMN CELL
f1:name timestamp=1621240902844, value=zxy
1 row(s) in 0.0200 seconds
## 默认查看最新的时间的值
hbase(main):018:0> get 'zxy:q1', 'r1'
COLUMN CELL
f1:name timestamp=1621241107495, value=zxy2
1 row(s) in 0.0080 seconds
类型2:get 'zxy:q1', 'r1', {TIMERANGE => [1621240902844, 1621241107494]}
(查看指定范围时间的数据值)
类型3:get 'zxy:q1','r1',{COLUMN=>['f1','f2','f3']}
(查看一个表中多个指定的列簇信息)
类型4:get 'zxy:q1','r1',{COLUMN=>'f1',TIMESTAMP=>1621241107495}
(查看1621241107495瞬间的值)
查看(scan)
类型1:scan 'zxy:q1'
(查询指定表的数据)
类型2:scan 'zxy:q1',{COLUMNS=>'f1:name'}
(查询q1表中所有的有name属性的数据)
类型3:scan 'zxy:q1',{COLUMNS=>['f1'],LIMIT=>2,STARTROW=>'r1'}
(查询q1表中的列簇f1,一共查询两行,从r1行开始,同一行的意思是行键相同)
类型4:scan 'zxy:q1',{COLUMNS=>'f1',TIMESTAMP=>[1621240902844, 1621241107494]}
(查看指定时间范围内的表中所有的最新值)
追加数据(append)
append 'zxy:q1','r1','f1:name','zxy3'
(zxy3即为追加值)
删除(delete)
类型1:delete 'zxy:q1','r1','f1:name'
(删除一个kv数据)
类型2:delete 'zxy:q1','r1'
(删除一行)
类型3:delete 'zxy:q1','r1','f1:name','zxy'
(删除指定版本-时间戳)
自增(incr)
incr 'zxy:q1','001','f1:age'
(在age设置自增键)
行数(count)
count 'zxy:q1'
(q1表的行数)
截断(truncate)
truncate 'zxy:q1'
1. java.lang.InCompatibleClassChanceErr:Found Jline.xxxxxx
- 解决:$HIVE_HOME/lib/jline-2.12.jar拷贝到$HADOOP_HOME/share/hadoop/yarn/lib
hive (default)> create database hive2hbase;
hive (default)> use hive2hbase;
create table if not exists hive2hbase(
uid int,
uname string,
age int,
sex string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:uname,info:age,info:sex")
TBLPROPERTIES ("hbase.table.name" = "hive2hbase1");
hive和hbase整合的jar包不匹配。
在这个hive中的以下jar包中,缺少依赖。
-rw-rw-r-- 1 root root 115935 Jun 19 2015 hive-hbase-handler-1.2.1.jar
解决方式:
要解压这个包,然后重新源码打包。
将我打包之后的jar包覆盖到hive服务器的lib目录下即可
然后重新在hive中执行2.1中的建表语句,之后就可以在hbase中查看到此表
##1. 在hive中导入数据,不能直接用load导入数据
create table if not exists t_user(
uid int,
uname string,
age int,
sex string
)
row format delimited
fields terminated by ',';
load data local inpath '/data/hive2hbase
/user.txt' into table hive2hbase.t_user;
insert into hive2hbase.hive2hbase
select * from hive2hbase.t_user;
##2. 在hbase导入数据
hbase(main):003:0> put 'hive2hbase1', '5', 'info:uname', 'luohao'
0 row(s) in 0.0420 seconds
hbase(main):004:0> put 'hive2hbase1', '5', 'info:age', '18'
0 row(s) in 0.0060 seconds
hbase(main):005:0> put 'hive2hbase1', '5', 'info:sex', 'bt'
0 row(s) in 0.0080 seconds
hive (hive2hbase)> select * from hive2hbase;
OK
1 lixi 34 man
2 wuliji 38 woman
3 xiangweihao 39 superman
4 wangyunfeng 40 superwoman
5 luohao 18 bt
##1. 在hbase中建表
hbase(main):008:0> create 't1', 'f1'
0 row(s) in 2.2450 seconds
=> Hbase::Table - t1
hbase(main):009:0> put 't1', '1', 'f1:name', 'ergouzi'
0 row(s) in 0.0090 seconds
hbase(main):010:0> put 't1', '1', 'f1:age', '11'
0 row(s) in 0.0040 seconds
hbase(main):011:0> put 't1', '2', 'f1:name', 'tiedan'
0 row(s) in 0.0020 seconds
hbase(main):012:0> put 't1', '2', 'f1:age', '22'
0 row(s) in 0.0020 seconds
##2. 在hive中建表
create external table if not exists t1(
uid int,
uname string,
age int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f1:age")
TBLPROPERTIES ("hbase.table.name" = "t1");
hive (hive2hbase)> select * from t1;
OK
1 ergouzi 11
2 tiedan 22
资源获取:
https://download.csdn.net/download/m0_51197424/18884938
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。