HBase的原理和安装及简单操作

HBase架构和原理

HBase 是列式存储,和 MySQL 的行式存储不一样。相比较而言,列式存储不会存储空数据,每行数据以key-value形式存储,可以同时存储上百万行

HBase 中有列簇概念,同一个列簇下的列存储在一起,在 Region 的一个 StoreFile 中。

HBase 是按照 Rowkey 进行查找,要查询的字段要想办法放到 Rowkey 中。

HBase 内部使用 LSM 三层模型进行存储,数据先写到内存的 MemStore 中,内存达到一定阈值再刷写到硬盘 StoreFile中,再满足一定条件时,小的 StoreFile 会合并为大的 StoreFile。StoreFile的底层是以HFile的格式存储的。

HBase WAL机制,数据写入内存的同时记下日志(HLog)。可以通过日志恢复策略保证内存数据不丢失。

HDFS 不能随机修改文件。HBase的存储是基于HDFS的。在HBase的数据修改和删除操作,实际上是新增一条时间更新的记录,通过timestamp来标识。旧的数据记录会在大合并时(Major Compact)被清理删除。数据量大的时候,大合并比较耗性能。

HBase中每一张表都会有元信息,存储在元信息表,也叫meta表。这个表是系统表,保存在zookeeper上。

HBase 写入数据的过程。先从meta表取元信息。根据Rowkey找到应该写入哪个RegionServer。然后写入这个RegionServer对应的内存MemStore中,同时记录操作日志WAL。当MemStore超过一定阈值,会将内存中数据写入硬盘StoreFile中,在一定条件下,小的StoreFile会合并成大的StoreFile,便于数据在HDFS中存储。如果有大量Rowkey相近的数据都被分配到同一个Region,导致数据过大,Region会拆分。HMaster会对拆分后的Region重新分配RegionServer。

HBase 读取数据的过程。先从meta获取元信息,确认要查的数据在哪些RegionServer上,分别在这些RegionServer上根据列簇进行StoreFile和MemStore的查找。查找出来以后根据timestamp返回最新的数据。

HBase 适合 OLAP 类的应用。侧重分析,对事务要求低。

HBase安装

下载hbase-2.0.0

wget http://archive.apache.org/dist/hbase/2.0.0/hbase-2.0.0-bin.tar.gz
tar zxvf hbase-2.0.0-bin.tar.gz -C /usr/local

注意:以下均为2.0.0为准
安装java环境

yum install java-1.8.0-openjdk* -y

安装完成后,查看hbase监听的端口,一般是内网IP监听,如果监听的是外网IP需要改成内网IP

方法一:
vi /usr/local/hbase-2.0.0/conf/regionservers
改成内网IP地址

vi /etc/hosts
添加一行
本机内网IP hbase_node

hostnamectl set-hostname hbase_node

重启hbase

方法二:

vi hbase-site.xml
添加下面这段:

<property>
<name>hbase.zookeeper.quorum</name>
<value>外网IP地址</value>
</property>

重启hbase

Hbase的操作

进入HBase命令行:

./HBase shell

HBase shell 区分大小写

help 查看命令帮助

list 查看表

建表

create 'group_msgs','group_msgs'

统计表逻辑行数:

count 'group_msgs'

遍历表:

scan 'group_msgs'

清空表但是保留表结构:

truncate 'group_msgs'

删表:

disable 'group_msgs'
drop 'group_msgs'

查看表是否存在:

exists 'group_msgs'  

查看表的列族信息:

describe 'group_msgs'   

查询表中某一列:

get 'group_msgs','groupId'

HBase 提供了三种查询方式:

全表扫描,scan。
根据一个 Rowkey 进行查询。
根据 Rowkey 过滤的范围查询。

在 HBase 中,列不是固定的表结构,在创建表时,不需要预先定义列名,可以在插入数据时临时创建。

根据ROW过滤的范围查询:

scan 'group_msgs',{STARTROW=>'',STOPROW=>''}

STARTROW是指的开始ROW,STOPROW是指的结束ROW

协处理器, 使HBase在执行求和、计数、排序等操作将变得更加高效,同时允许用户扩展实现HBase目前所不具备的功能,如权限校验、二级索引、完整性约束等
协处理器的加载方式:
全局加载,对所有表生效。
在HBase-site.yml中添加:

<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value>
</property>

重启HBase

hbase的数据导出和导入。导出的时候,/data/databak不需要提前创建。导入前需要先手动建表

hbase org.apache.hadoop.hbase.mapreduce.Driver export group_msgs file:///data/databak
hbase org.apache.hadoop.hbase.mapreduce.Driver import group_msgs file:///data/databak

Hbase自带的命令行查询不太方便,所以通常会引入Hbase的中间件比如Phoenix等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值