Hbase 基础第一讲-基本原理

8 篇文章 0 订阅
5 篇文章 0 订阅

1.Hbase概述

1.1 什么是Hbase?

HBase 是建立在 HDFS之上,高可靠性、高性能、列存储、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时读写访问。

1.2 hbase 特点

库:
1、高并发,解决海量数据集的随机实时增删改查
2、HBase本质依然是Key-Value数据库,不支持join等复杂操作
3、不支持复杂的事务,只支持行级事务
4、HBase中支持的数据类型:byte[](底层所有数据的存储都是字节数组)
5、主要用来存储结构化和半结构化的松散数据。

2. Hbase 核心物理概念

在这里插入图片描述
索引数据的流程:table —> rowkey —> column family —> column —> timestamp
行健(rowkey):HBase中的每张表,都会按照rowkey全局排序
列簇(Column Family):包含一组列,列在插入数据之前指定,列簇就必须在建表的时候指定
列(Column):一个列簇中会包含多个列,并且可以不同
时间戳(TimeStamp):每个列的值都可以保存多个版本,使用时间戳来表示,并且按照时间戳由近到远排序。
3.1 行健
RowKey是用来检索记录的主键。
1、通过单个row key访问
2、通过row key的range
3、全表扫描
3.2列簇–region
类似于关系型数据库的表概念。
1.必须在创建表的时候指定。指定好了列簇就不能更改。
2.列簇可以增加或者删除,删除的时候会删除这个列簇中的所有数据
3.列名都以列簇作为前缀。例如 courses:history ,courses:math 都属于courses这个列簇
3.3单元格
1.由 {RowKey, Column(= + ), Version} 唯一确定的单元,全部是字节码形式存储
2.Hfile 是hbase 的表数据落地到磁盘的时候的存储形式。
3.Hfile管理的就是cell对象
3.4 namespace
命名空间,类似于关系型数据库的 DatabBase 概念
有两个自带的命名空间,分别是 hbase 和 default, hbase 中存放的是 HBase 内置的表。default 表是用户默认使用的命名空间
3.5 6Row
HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey

3. HBase集群结构

在这里插入图片描述

3.1Hmaster 是主节点

对于表的操作: create, delete, alter
对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个RegionServer。

3.2 HRegionServer 从节点,会去管理一张表的region

对于数据的操作: get, put, delete;
对于 Region 的操作: splitRegion、 compactRegion。
一个HRegionServer可以管理多个HRegion。这些region可能来自于同一个表来自不同的表。一个region分为多个store,一个列族就是一个store.多个hfile合并成一个storefile ,hfile底层就是block。数据块 。
Region–>表的分段存储的。
一个store 由这三个组成
blockCache 读缓存
Memstore 写缓存 --2个
Hfile 磁盘文件–多个
在这里插入图片描述

3.3Zookeeper

HBase 通过 Zookeeper 来做 Master 的高可用、 RegionServer 的监控

3.4HDFS

HDFS 为 HBase 提供最终的底层数据存储服务

4.HBase和Hive的比较

1.相同点
HBase和Hive都是架构在Hadoop之上,用HDFS做底层的数据存储,用MapReduce做数据计算
2.不同点
1、Hive是建立在Hadoop之上为了降低MapReduce编程复杂度的ETL工具。HBase是为了弥补Hadoop对实时操作的缺陷
2、Hive表是纯逻辑表,因为Hive的本身并不能做数据存储和计算,而是完全依赖Hadoop
HBase是物理表。
4、Hive表中存入数据(文件)时不做校验,属于读模式存储系统,HBase表插入数据时,会和RDBMS一样做Schema校验,所以属于写模式存储系统
5、Hive不支持单行记录操作,HBase支持单行记录的CRUD,并且是实时处理,效率比Hive高得多。

5.HBase命令

进入hbase命令:hbase shell
查看帮助文档

help

5.1.显示hbase中的表列表:list

list

5.2.创建表

1.创建一张hbase表,表名叫做user,该表有info和data两个列簇

create 'user', 'info', 'data'
也可以这样写:
create 'user',{NAME=>'info'},{NAME=>'data'}

创建一张表叫做user_info,包含两个列簇base_info和extra_info,并且分别指定这两个列簇的数据版本数为3和1

create 'user_info',{NAME=>'base_info',VERSIONS=>3 },
{NAME=>'extra_info',VERSIONS=>1}

5.3查看表的详细信息:

desc或者describe

desc "user_info

5.4 往表中插入数据:put

向user表中插入信息,row key为rk0001,列簇info中添加name列标示符,值为zhangsan

put 'user', 'rk0001', 'info:name', 'zhangsan'
put(table,rowkey,cf:column/key,timestamp,value)

5.5查询数据:get

获取user表中row key为rk0001的所有信息–获取指定行

get 'user', 'rk0001'

获取user表中row key为rk0001,info列簇的所有信息

get 'user', 'rk0001', 'info'

获取user表中row key为rk0001,info列簇的name、age列标示符的信息

get 'user', 'rk0001', 'info:name', 'info:age'

获取user表中row key为rk0001,info和data列簇的信息

get 'user', 'rk0001', 'info', 'data'

获取user表中row key为rk0001,列簇为info,版本号最新5个的信息

get 'user', 'rk0001', {COLUMN => 'info', VERSIONS => 2}

统计数据行数

count 'student'

5.7 查询数据:scan

查询user_info表中的所有信息

查询user_info表中的指定列簇的所有信息

查询user_info表中列簇为base_info、列标示符为name的信息,并且版本最新的5个

查询user表中列簇为info和data且列标示符中含有a字符的信息

scan 'user', {COLUMNS => ['info', 'data'], FILTER =>(QualifierFilter(=,'substring:a'))"}

查询表名为user_info表中列簇为base_info,rowkey的起始偏移范围是[baiyc_20150716_0003,baiyc_20150716_0006)的数据

scan 'user_info', {COLUMNS => 'base_info', STARTROW => 'baiyc_20150716_0003',ENDROW => 'baiyc_20150716_0006'}

查询user表中rowkey以rk字符开头的

scan 'user', {FILTER=>"PrefixFilter('rk')"}

查询user_info表中指定时间戳范围的数据

scan 'user_info', {TIMERANGE => [1540882871681,1540882888540]}

5.8删除数据:delete

删除记录

delete 'user', 'rk0001' ##不能一口气删除一个rowkey所对应的所有key-value

删除字段

delete 'user', 'rk0001', 'info:name'

删除user_info表rowkey为user0000,列标示符为info:name的数据

delete 'user_info', 'user0000', 'base_info:name' ##实现删除,其他两句为辅助测试语

删除user表rowkey为rk0001,列标示符为info:name,timestamp为1392383705316的数据

delete 'user', 'rk0001', 'info:name', 1392383705316

5.7修改表结构:alter

修改表结构:alter
添加两个列簇f2和f3

alter 'user_info', NAME => 'f2'

删除一个列簇f2

alter 'user_info', NAME => 'f2', METHOD => 'delete'

清空user表中的数据

truncate 'user'

停用表/启用表:disable和enable

disable 'user'
enable 'user'

5.8 删除表

首先需要先让该表为 disable 状态:
disable 'user'
然后才能 drop 这个表:
drop 'user'	

6.过滤器操作

get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中国')"}
get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据学习爱好者

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值