《HBase系列》HBase详细入门教程

一、HBase详细入门教程

1.HBase介绍

分布式的数据库,它的本质是将数据存放在HDFS。它和Hive的最大区别就是,Hive的本质相当于封装了Mapreduce,HBase的本质相当于封装了HDFS。帮助我们存储一些非结构化的数据。他是一个Nosql的数据库。

使用场景:

1.海量非结构化或者结构化的数据的存储

2.需要实现近实时的读写管理的数据

2.HBase结构

在这里插入图片描述

1.client:hbase的客户端,使用shell命令或者APIHBase发出请求,并且客户端其实会缓存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是物理上的名称

3.HBase命令

3.1 基础命令

  • help
  • help ‘create_namespace’
  • status
  • version
  • whoami

3.2 namespace(库操作)

  • 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'}
(删除)

3.3 DDL(表操作)

  • 建表(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'
    

3.4 DML(表数据操作)

  • 插入(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'
    

二、Hive整合HBase

1 可能会出现的异常(全分布式)

1. java.lang.InCompatibleClassChanceErr:Found Jline.xxxxxx
- 解决:$HIVE_HOME/lib/jline-2.12.jar拷贝到$HADOOP_HOME/share/hadoop/yarn/lib

2 建立hive关联hbase的表

2.1 建表语句

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");

2.2 报错

在这里插入图片描述

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中查看到此表

2.3 测试

##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

3 建立HBase关联Hive的表

##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
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
HBase是一个开源的、分布式的、列式存储的NoSQL数据库,它基于Hadoop分布式文件系统(HDFS)运行。HBase教程PDF是一份详细介绍HBase的学习材料,是帮助初学者快速入门HBase的重要资源。 HBase教程PDF通常包含以下内容: 1. HBase的简介:介绍HBase的背景、特点和优势,使读者对HBase有一个基本的了解。 2. HBase的安装和配置:指导读者如何在自己的机器上安装HBase,并进行必要的配置。 3. HBase的数据模型:详细介绍HBase的数据模型,包括表、行、列和单元格等概念,帮助读者理解HBase的存储结构和数据访问方式。 4. HBase的API操作:介绍HBase提供的API,包括对表的创建、删除、读写操作的具体步骤和示例代码。 5. HBase的集群管理:指导读者如何搭建和管理HBase集群,包括主节点和从节点的配置、负载均衡和故障处理等。 6. HBase的性能优化:介绍一些提升HBase性能的方法和技巧,如数据预分区、缓存大小的配置和压缩算法等。 7. HBase的应用案例:给出一些实际的应用案例,如日志存储、实时计算和图数据库等,帮助读者了解HBase的具体应用场景。 通过学习HBase教程PDF,读者能够系统地了解、学习和应用HBase,从而更好地利用HBase处理大数据和构建分布式应用。同时,HBase教程PDF也提供了丰富的示例代码和实践经验,帮助读者更好地理解和运用HBase的各项功能。对于想要学习HBase的人来说,HBase教程PDF是一个非常有价值的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DATA数据猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值