Hbase优化
- 概念: hbase优化可通过以下几个方面,flush,compaction,split和列簇属性来实现
Flush
意义: 用于将memstore中的数据写入HDFS,变成storefile文件,空出内存,用于存储新数据
-
自动触发规则:
- 默认单个memstore的存储达到128M,就会触发
- 默认整个region的memstore的数据达到128M*4,就会触发
- 默认整个regionserver中的memstore的使用率达到堆内存的40%,就会触发
-
缺点:
- 自动触发,会导致磁盘IO的负载过高,会影响业务,一般会关闭自动触发,根据实际情况定期的在业务比较少的时候,手动触发
手动触发:
关闭自动触发:将所有自动触发的条件调高,定期的在没有达到自动触发的条件之前通过flush命令手动触发总结:
将自动触发条件调高,以此来关闭自动触发flush,并在业务量较少时通过手动触发flush,以此来达到优化目的
Compaction
意义: 用于实现将多个storefile文件,合并成一个storefile文件,变成一个整体有序的文件,加快读的效率
-
自动触发规则:
- minor compaction:轻量级的合并,合并部分storefile成一个文件,smart算法,将最早生成的三个文件合并,不定期执行,占用IO比较小
- major compaction:重量级的合并,合并所有的storefile文件成一个文件
- 默认七天会触发一次compaction
-
缺点:
- 自动触发,会导致磁盘IO的负载过高,会影响业务,一般会关闭自动触发,根据实际情况定期的在业务比较少的时候,手动触发
手动触发:
关闭自动触发,通过major_compact命令来进行手动指定表合并或列合并总结:
关闭自动触发major compaction,并在业务量较少时通过手动触发major_compact
Split
意义: 将一个region分裂成两个region,分摊region的负载
-
自动触发规则:
- 0.94版本之前规则:如果整个region的某个store的大小达到10GB,就会触发
- 0.94版本之后Math.min(getDesiredMaxFileSize(),initialSize * tableRegionsCount * tableRegionsCount * tableRegionsCount); 即若region个数在0~100之间,min(10g,256M*region个数的三次方)
-
缺点:
- 自动触发,会导致磁盘IO的负载过高,会影响业务,一般会关闭自动触发,根据实际情况定期的在业务比较少的时候,手动触发
手动触发:
关闭自动触发:hbase.client.keyvalue.maxsize=100GB,不可能达到这个值,根据集群region的数据量,来定期手动触发总结:
关闭自动触发,并在业务量较少时通过手动触发split
列簇属性
BLOOMFILTER: 布隆过滤器
用于在检索storefile文件时,根据索引判断该storefile文件中是否有想要的数据,若没有直接跳过
级别: none 不开启,
row 判断是否有需要的rowkey,没有就跳过
rowcol 判断是否有需要的rowkey和cf:c,没有就跳过Versions: MaxVersions,最大版本数,该列族中的列最多允许存储多少个 版本
TTL: 版本存活时间,从该版本的timestamp进行计算,一旦到达这个时间,就表示该数据过期,用户hbase自动清理数据
MIN_VERSIONS:最小版本数,该列族中的数据当达到TTL时间以后,最小保留几个版本
BLOCKCACHE: 读缓存,是否将这个列簇的数据读到memcache缓存中,默认开启,建议将不经常读取的列簇关闭
IN_MEMORY: 代表BLOCKCACHE中的一种缓存的最高级别,默认是关闭的,IN_MEMORY是最高级别的缓存,缓存会定期的进行LRU清理,缓存级别越低,优先会被清理,不要随便开启IN_MEMORY,因为meta表就在IN_MEMORY级别的缓存中
BLOCKSIZE: storefile文件块的大小,默认64k,数据块越小,数据块越多,维护索引越多,内存占用越多,读快写慢,数据块越大,数据块越少,维护索引越少,内存占用越少,读慢写快
COMPRESSION: Hbase中的压缩其实就是hadoop的压缩,本身就是压缩storefile的存储
Hbase和RDBMS对比
Hbase:
支持向外扩展
使用API 和MapReduce 来访问HBase 表数据
面向列,即每一列都是一个连续的单元
数据总量不依赖具体某台机器,而取决于机器数量
HBase 不支持ACID(Atomicity、Consistency、Isolation、Durability)
适合结构化数据和非结构化数据
一般都是分布式的
HBase 不支持事务
不支持Joinrdbms:
支持向上扩展
使用SQL 查询
面向行,即每一行都是一个连续单元
数据总量依赖于服务器配置
具有ACID 支持
适合结构化数据
传统关系型数据库一般都是中心化的
支持事务
支持Join
Hbase的增删改查
功能: hbase中实际没有更新和删除操作,hbase中只有增加和查询操作;更新是将新数据插入内存,,删除是将数据逻辑删除,等后续合并时再做覆盖旧版本数据和物理删除数据
-
意义:
- 为了快速返回处理读写请求,数据只要写入就里面返回结果
-
区别:
- get与scan的区别
get命令是hbase中最快的查询方式,因为指定了索引rowkey,但是只能查询一条数据
scan命令可以返回多条数据,一般结合过滤器使用 - put和delete没有返回结果
- get与scan的区别
hbase/hive/hdfs/rdbms的区别
- hbase:
- 概念: 实时读写的数据库
- 用途: 存储数据
- 场景: 用于实现实现大量数据的实时读写文件,例如搜素引擎,一般用于高性能计算架构中,能存储半结构或结构化数据
- hive:
- 概念: 结构化数据仓库
- 用途: 存储数据
- 场景: 只能用于存储结构化数据,用来构建数据仓库的工具
- hdfs:
- 概念: 文件存储系统
- 用途: 存储数据
- 场景: 可以用于存储结构化,半结构化,非结构化的数据,适用于一次存入多次读取,例如网盘,用于做数据归档
- rdbms:
- 概念: 关系型数据库
- 用途: 存储数据