博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hbase进阶
阅读量:4300 次
发布时间:2019-05-27

本文共 1242 字,大约阅读时间需要 4 分钟。

Namespace:其实就是database,但是Hbase其实没有数据库这种概念的,为了区分就叫namespace。

 

安全上做的比较粗糙,用grant来授权给表或者列族(这里做的还挺细)

R  织入

W 可写 

C 创建

A 管理

如grant 'liugen' ,'RWCA' ,'my_hbase_table'

 

 

revoke 去掉权限

反向操作很简单

查询就用 user_permission  'my_hbase_table'

 

 

HBase Region是随着put数据不断变大的,内部机制细胞分裂搬地进行分Region。

新Region会放到另一个RegionServer。

两种方式:

0.默认自动化

1. 人为设定,但本质还是自动化,达到某些阀值就自动split。

2. 自定义split方式

 

 

Compaction:压缩(打包)机制

动机是普通的关系型数据库删了就是从磁盘上删了,这样速度就比较慢。

而Hbase是通过合并日志的方式,把新数据直接append到旧数据后面,在内存中直接合并。

这样的好处是速度非常快,相当于以空间换时间,以后我们发现旧版本确实用不上的时候(维护的时候),我们在把数据从磁盘上删除。

 

 

压缩有2种,一种是小文件的压缩,一种是大文件的压缩。

小文件的压缩如下图所示,HBase把文件从RegionServer下发到hdfs中,由于它用的都是自己的HFile格式,64k一个数据块很小。小文件太多不适合hdfs,所以就用minor compaction来合并成相对大的文件。这种情况不怎么占用I/O CPU资源,随时可以进行。

Majorcompaction:大的合并也如下图所示

1. 把相同column family的所有Hfile文件统一合并起来

2.把标记过的打算删的文件,这次就真的从disk上删掉

compaction占用空间资源比较多,系统空闲时才能做。

 

总结

压缩过程:

写Hbase的时候,先写到WAL(预写式日志),

写到一定数量文件之后就会把这个log 给flush到disk

同时把Memstore里面真正的数据flush到disk。

也就是说,我们是先通过WAL来把它写入hdfs,之后在缓存Memstore里对数据进行一些处理,

然后再真正的写入hdfs的disk,然后做Minor Compaction和Major Compaction。

(这块现在不用理解这么深,有个大概印象就行,后面再深入理解,你现在知道是先通过log来合并就好,

然后Memstore是真正产生HFile的地方)

 

flush和MInor Compaction是事件驱动,

Major Compaction必须是时间驱动,因为对I/O和CPU消耗太大。

 

相关控制

Flush 可以设置memstore.flush的大小,

Mionor Compaction 你可以控制最大和最小的文件数目来合并。

Major Compaction  定义时间间隔来进行。

 

转载地址:http://xuvws.baihongyu.com/

你可能感兴趣的文章
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>