Hbase 基于HDFS分布式列存储Nosql数据库(五) 概念及原理介绍

Hbase优化

  • 概念: hbase优化可通过以下几个方面,flush,compaction,split和列簇属性来实现

Flush

  • 意义: 用于将memstore中的数据写入HDFS,变成storefile文件,空出内存,用于存储新数据

  • 自动触发规则:

    1. 默认单个memstore的存储达到128M,就会触发
    2. 默认整个region的memstore的数据达到128M*4,就会触发
    3. 默认整个regionserver中的memstore的使用率达到堆内存的40%,就会触发
  • 缺点:

    1. 自动触发,会导致磁盘IO的负载过高,会影响业务,一般会关闭自动触发,根据实际情况定期的在业务比较少的时候,手动触发
  • 手动触发:
    关闭自动触发:将所有自动触发的条件调高,定期的在没有达到自动触发的条件之前通过flush命令手动触发

  • 总结:
    将自动触发条件调高,以此来关闭自动触发flush,并在业务量较少时通过手动触发flush,以此来达到优化目的

Compaction

  • 意义: 用于实现将多个storefile文件,合并成一个storefile文件,变成一个整体有序的文件,加快读的效率

  • 自动触发规则:

    1. minor compaction:轻量级的合并,合并部分storefile成一个文件,smart算法,将最早生成的三个文件合并,不定期执行,占用IO比较小
    2. major compaction:重量级的合并,合并所有的storefile文件成一个文件
    3. 默认七天会触发一次compaction
  • 缺点:

    1. 自动触发,会导致磁盘IO的负载过高,会影响业务,一般会关闭自动触发,根据实际情况定期的在业务比较少的时候,手动触发
  • 手动触发:
    关闭自动触发,通过major_compact命令来进行手动指定表合并或列合并

  • 总结:
    关闭自动触发major compaction,并在业务量较少时通过手动触发major_compact

Split

  • 意义: 将一个region分裂成两个region,分摊region的负载

  • 自动触发规则:

    1. 0.94版本之前规则:如果整个region的某个store的大小达到10GB,就会触发
    2. 0.94版本之后Math.min(getDesiredMaxFileSize(),initialSize * tableRegionsCount * tableRegionsCount * tableRegionsCount); 即若region个数在0~100之间,min(10g,256M*region个数的三次方)
  • 缺点:

    1. 自动触发,会导致磁盘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 不支持事务
    不支持Join

  • rdbms:
    支持向上扩展
    使用SQL 查询
    面向行,即每一行都是一个连续单元
    数据总量依赖于服务器配置
    具有ACID 支持
    适合结构化数据
    传统关系型数据库一般都是中心化的
    支持事务
    支持Join

Hbase的增删改查

  • 功能: hbase中实际没有更新和删除操作,hbase中只有增加和查询操作;更新是将新数据插入内存,,删除是将数据逻辑删除,等后续合并时再做覆盖旧版本数据和物理删除数据

  • 意义:

    1. 为了快速返回处理读写请求,数据只要写入就里面返回结果
  • 区别:

    1. get与scan的区别
      get命令是hbase中最快的查询方式,因为指定了索引rowkey,但是只能查询一条数据
      scan命令可以返回多条数据,一般结合过滤器使用
    2. put和delete没有返回结果

hbase/hive/hdfs/rdbms的区别

  • hbase:
    1. 概念: 实时读写的数据库
    2. 用途: 存储数据
    3. 场景: 用于实现实现大量数据的实时读写文件,例如搜素引擎,一般用于高性能计算架构中,能存储半结构或结构化数据
  • hive:
    1. 概念: 结构化数据仓库
    2. 用途: 存储数据
    3. 场景: 只能用于存储结构化数据,用来构建数据仓库的工具
  • hdfs:
    1. 概念: 文件存储系统
    2. 用途: 存储数据
    3. 场景: 可以用于存储结构化,半结构化,非结构化的数据,适用于一次存入多次读取,例如网盘,用于做数据归档
  • rdbms:
    1. 概念: 关系型数据库
    2. 用途: 存储数据

你可能感兴趣的:(Hbase 基于HDFS分布式列存储Nosql数据库(五) 概念及原理介绍)