Hbase知识、shell、api

本文深入探讨HBase数据库,一种建立在Hadoop之上的分布式、高可靠、高性能、可伸缩的NoSQL存储系统,专为海量数据实时读写设计。文章详细讲解HBase的架构、特性及应用场景。

产生背景

标题

最早以前各大公司都使用hadoop作为大数据存储,并使用MapReduce做存储,它擅长存储各种庞大的数据,任意结构的数据都能存储。

Hadoop的限制

hadoop只能批量处理数据,且只能顺序访问数据。即搜索一个庞大的数据集需要从头搜到尾。

hadoop的特点

对于任意格式的数据,hadoop可以做到安全存储,但对于庞大数据单条的增删改查是做不到的。

Hive的特点

可以使用Hql进行各种select 或者insert等操作,但是hive还是不支持单条数据的增删改查操作。
总结:
(1) 海量数据存储成为瓶颈,单台机器无法进行负载大量数据。
(2)单台机器io读写请求成为海量数据存储时候高并发大规模请求的瓶颈
(3)随着数据规模越来越大,大量业务考虑横向扩展,使得存储服务可以增加/删除。

Hbase

Hbase是Apache hadoop的数据库,是建立在hdfs之上,被设计用来提供高可靠、高性能、高存储、可伸缩、多版本的NoSQL的分布式数据存储系统,实现对大数据实时、随机的读写访问。

Hbase依赖hdfs做底层数据存储,
Hbase依赖于MapReduce做数据计算
Hbase依赖于Zookeeper做服务协调

Hbase的特点

(1)高并发来扩展和解决海量数据集的随机实时增删改查
(2)Hbase本质还是K-V数据库,查询功能简单,不支持join等复杂连接操作。
(3)不支持复杂事务,只支持行级事务
(4)Hbase中支持的数据类型:byte[](所有底层数据的存储都是字节数组)
(5)主要用来存储结构化和半结构化的松散数据

Hbase表中数据特点

一个表可以有上十亿行,上百万列
列可以灵活指定,对列簇单独检索
对于空(null)的列 不占用存储空间,因为表的设计可以非常稀疏。

Hbase行键(Rowkey)

与NoSQL数据库一样,rowkey等同于key(主键),访问Hbase table中的行有三种方式:
1.通过单个rowkey访问
2.通过rowkey的范围
3.全盘扫描

rowkey行键可以是任意字符串(最大长度64kb),最好是16以内。Rowkey保存为字节数组。Hbase会对表中数据按照rowkey排列(字典顺序)。

列簇(Column Family)

HBase 表中的每个列,都归属与某个列簇。列簇是表的 Schema 的一部分(而列不是),必须
在创建表的时候指定。指定好了列簇就不能更改。列簇可以增加或者删除,删除的时候会删
除这个列簇中的所有数据

列名都以列簇作为前缀。例如 info:history,info:math 都属于 info 这个列簇。
访问控制、磁盘和内存的使用统计等都是在列簇层面进行的。

列簇越多,在取一行数据时所要参与 IO、搜寻的文件就越多,所以,如果没有必要,不要
设置太多的列簇,官网推荐是小于等于 3(最好就一个列簇)

时间戳(TimeStamp)

HBase 中通过 RowKey 和 Column 确定的为一个存储单元称为 Cell。每个 Cell 都保存着同一份
数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由 HBase
(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户
显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个
Cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。HBase 在查询的时
候,默认返回最新版本/最近的数据。如果需要读取旧版本的数据,可以指定时间戳

为了避免数据存在过多版本造成的的管理(包括存储和索引)负担,HBase 提供了两种数据版
本回收方式:
保存数据的最后 n 个版本
保存最近一段时间内的版本(设置数据的生命周期 TTL)。
用户可以针对每个列簇进行设置。

单元格(Cell)

由{RowKey, Column( = + ), Version} 唯一确定的单元。

Hbase使用场景

1、半结构化或非结构化数据
2、记录稀疏
3、多版本数据
4、超大数据量的随机、实时读写
5、查询简单

Hbase集群结构

Region:

是 HBase 将一个表中的所有数据按照 RowKey 的不同范围进行切割的逻辑单元,每 个 Region 负责一定范围数据的读写访问。Region 由 RegionServer 负责管理。HBase 中的 Region
的概念就和 HDFS 中的数据块的概念差不多,Region 是 HBase 表切分出来的一个分片。数据
块是 HDFS 中的一个大文件切分出来的一个分片。

HMaster:

HBase 的主节点,负责整个集群的状态感知、负载分配、负责用户表的元数据
(schema)管理(可以配置多个用来实现 HA),HMaster 负载压力相对于 HDFS 的 NameNode
会小很多。HBase 的 HMaster 其实就算是宕机一段时间也可以正常对外提供服务的(要搞清
楚为什么)。

RegionServer:

HBase 中真正负责管理 Region 的服务器,也就是负责为客户端进行表数据读
写的服务器。每一台 RegionServer 会管理很多的 Region,一个 RegionServer 上面管理的所有
的region不属于同一张表。负责Region的拆分,负责和底层的HDFS的存储交互,负责StoreFile
的合并。

ZooKeeper:

整个 HBase 中的主从节点协调,元数据的入口,主节点之间的选举,集群节点
之间的上下线感知……都是通过 ZooKeeper 来实现

HDFS:

用来存储 HBase 的系统文件,或者表的 Region 文件

Client:

Client 包含了访问 HBase 的接口,另外 Client 还维护了对应的 Cache 来加速 HBase 的
访问,比如 Cache 的.META.元数据的信息。

Hbase shell

1、list 显示数据库中所有的表
2、create 创建表
exp:
create ‘userInfo’,‘info’ 创建表名为userInfo,列簇为info的表
3、desc ‘userInfo’ 查看表结构
4、put 插入数据
exp:
put ‘userInfo’,‘rk’,‘info:name’,‘ll’ 向userInfo表中插入 rowkey=rk cf=name value=ll
5、查询
get ‘userInfo’,‘rk’
获取userinfo表中 rowkey=rk所有信息
get ‘userInfo’,‘rk’,‘info:name’ 获取userinfo表中 rowkey=rk info:name所有信息

scan ‘userinfo’ 查询userInfo所有数据
scan ‘user_info’, {COLUMNS => ‘base_info:name’} 查询 user_info 表中的指定列簇的所有信息

删除记录
delete ‘user’, ‘rk0001’

添加两个列簇 f2 和 f3
alter ‘user_info’, NAME => ‘f2’

清空 user 表中的数据
truncate ‘user’

首先停用 user 表
disable ‘user’
启用表
enable ‘user’

删除表
disable 'user
drop ‘user’

过滤器
get ‘user’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:中国’)”}
get ‘user’, ‘rk0001’, {FILTER => “(QualifierFilter(=,‘substring:a’))”}
scan ‘user’, {COLUMNS => [‘info’, ‘data’], FILTER => “(QualifierFilter(=,‘substring:a’))”}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值