HBase总结

本文深入介绍了HBase的特点,包括其高可靠性、高性能、面向列的存储结构、可伸缩性及实时读写能力。详细解释了HBase如何利用内存、LSM树、缓存机制来实现高速数据处理,并解析了rowkey、columnfamily、qualifier、timestamp和cell等核心概念,以及HBase的架构组成。
摘要由CSDN通过智能技术生成

hbase特点

  • 高可靠
  • 高性能
  • 面向列
  • 可伸缩
  • 实时读写

hbase数据量:十亿级别的行、百万级别的列

hbase速度快的原因:

  • 因为它充分利用了内存,优先往内存中写,之后的溢写合并就不再关客户端的事,客户端只负责将数据写到内存中,所以它的速度比较快。
  • 使用了LSM树
  • 缓存机制(写缓存、读缓存)
  • 文件是顺序读写(并非随机读写,不需要磁道的移动寻址时间)(使用get获取数据时,get的底层也是通过scan得到的)

hbase数据模型

  • rowkey
    • 相当于mysql的主键,唯一标识一行记录
    • 按字典序排序
    • rowkey的长度最长是64k,但一般推荐10-100字节
  • column family列族
    • 一组列的集合。一个列族可以包含n多个列,由列名标识
    • 列族必须作为表的schema(定义的一个规则,这个列族名字叫什麽,里面包含哪些属性)
    • 列族是权限、存储的最小单元,是可操作的最小粒度。位于同一个列族下面的所有列共享相同的权限属性。
  • qulifier 列
    • 可以动态的,随机的插入
    • 表定义之后没有限制列,随着值的插入也把列插入
    • 列必须归属于某一个列族
  • timestamp 时间戳
    • 64位整数,精度是毫秒
    • 起版本号的作用,一个cell中可以存在多版本的数据
    • 时间戳可以自己定义但是一般不推荐
  • cell
    • 存储数据的最小单元(逻辑上的概念,真实物理上有多少列对应多少行)
    • 存储的是KV格式的数据:K=row key+column family+qulifier+timestamp V=value
    • hbase的cell存储数据的时候没有类型之分,存储的都是字节数组

hbase架构:主从架构

  • 角色
    • client

      • 1.操作hbase的接口:
        • a. 命令行
        • b. java api
          • HBaseAdmin 管理表
            • createtable
            • disabletable
            • deletetable
          • HTable 管理数据
            • 添加数据 put
            • 获取数据 get \ scan
            • 删除数据 delete
      • 2.并维护客户端的缓存
    • zookeeper:高可用+存储元数据的元数据

      • 保证任何时刻集群中只有一台active的master
      • 存储所有region的寻址入口:指的是所有region的元数据存储在哪一台regionserver中,默认放在hbase这个命名空间下的meta目录中,也存储于hdfs中 /hbase/data/hbase/meta
      • 监控regionserver的上线和下线信息,并实时通知master
      • 存储相关的表的数据(表的名称等)
        • ls /hbase
          [replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table]
          [zk: localhost:2181(CONNECTED) 10] ls /hbase/table
          [hbase:meta, psn, hbase:namespace, phone]
          命名空间:表名称,没有带命名空间的默认为default
    • master

      • 掌握所有regionserver的使用情况,为其分配region
      • 保证整个集群中所有regionserver中的负载均衡
      • 当发现某一台regionserver宕机之后,重新分配上面的region
      • 当region变大发生裂变之后,master负责去分配region到哪一台regionserver中
    • regionserver

      • 负责接收客户端的读写请求,处理对于region的io
      • 当某一个region变大之后,regionserver负责等分该region为两个region。regionserver负责切,master负责分配
    • region

      • 相当于表的概念
      • 一张表至少对于一个region
      • 当表的数据过大的时候,region会发生等分裂变(由regionserver分,由master分配)
    • store(逻辑上)

      • 相当于列族
      • store中有memstore和storefile
      • memstore位于内存,每一个store有一个memestore
      • storefile是磁盘存储空间,将数据持久化存储的位置
      • 每一个region有一个或多个storefile
      • storefile数量过多会进行合并操作(默认数量为3)
      • 存储结构:使用了LSM树的数据模型
    • WAL

      • write ahead log预写日志hlog
      • 防止数据丢失
      • 先写内存,再向hdfs上溢写,但是是异步的方式
    • 读写流程

      • 读流程:
        • 客户端向zk中发送请求
        • 从zk中拿到metadata的存储节点
        • 去存储metadata的节点获取对应的region所在的位置
        • 访问对应的region拿到数据
          • 先去memstore查询,如果有结果直接返回
          • 如果没有结果,再去blockcache中查找,如果找到直接返回
          • 如果没有再去storefile中查找数据,并将查询到的结果返回到blockcache中方便下一次查询
        • 将结果返回到客户端
        • 注意:blockcache是缓存,有大小限制,会有淘汰机制,默认将最早进来的数据淘汰
      • 写流程
        • 客户端向zk发送请求
        • 从zk中拿到metadata的存储节点
        • 去存储meta的节点获取对应region所在的位置
        • 访问对应的region,写数据
          • 首先会向hlog中写数据,写成功之后才会向memstore中写数据
          • 当memstore的数据量达到阈值之后会发生溢写,溢写成storefile
          • storefile是一个个的小文件,会进行合并(合并的两种方式:minor,major)
          • storefile是对hfile 的封装,hfile是实际存储在hdfs上的数据文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值