hbase介绍和架构

说明

  • hbase是大数据平台上开源的、面向列的分布式数据库,技术源于Fay Chang撰写的Google论文BigTable:一个结构化数据的分布式存储系统。是一种NoSql数据库。
  • hbase依赖hdfs存储文件,必须构建在hadoop平台上。
  • hbase 内置zookeeper实行分布式同步

特点

  • 强读写一致,不是“最终一致性”的数据存储,这使得它非常适合高速的计算聚合
  • 自动分片,通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
  • 自动的故障转移
  • Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
  • 丰富的“简洁,高效”API,Thrift/REST API,Java API
  • 块缓存,布隆过滤器,可以高效的列查询优化
  • 操作管理,Hbase提供了内置的web界面来操作,还可以监控JMX指标
  • HBase 是一个稀疏的、分布式、持久、多维、排序的映射,它以行键(row key),列键(column key)和时间戳(timestamp)为索引。
  • Hbase在存储数据的时候,有两个SortedMap,首先按照rowkey进行字典排序,然后再对Column进行字典排序。SortedMap<RowKey,List<SortedMap<Column,List<Value,Timestamp>>>>

hbase使用场景

  1. 数据量足够大,如果有十亿及百亿行数据,Hbase是一个很好的选择,如果只有几百万行甚至不到的数据量,RDBMS(mysql、oracle)是一个很好的选择。因为数据量小真正能工作的机器量少,剩余的机器都处于空闲状态
  2. 如果不需要辅助索引和静态类型的列、事务等特性,已使用RDBMS的系统要切换到Hbase,需要重新设计系统
  3. 保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。

Hbase架构

简单架构

在这里插入图片描述

  • Zookeeper,作为分布式的协调。RegionServer也会把自己的信息写到ZooKeeper中。
  • HDFS是Hbase运行的底层文件系统
  • RegionServer,理解为数据节点,负责存储数据
  • RegionServer要实时的向Master报告信息。Master知道全局的RegionServer运行情况,可以控制RegionServer的故障转移和Region的切分。

架构细化

在这里插入图片描述

  • HMaster是Master Server的实现,负责监控集群中的RegionServer实例,同时是所有metadata(元数据)改变的接口,在集群中,通常运行在NameNode上面
    • HMasterInterface暴露的接口,Table(createTable, modifyTable, removeTable, enable, disable),ColumnFamily (addColumn, modifyColumn, removeColumn),Region (move, assign, unassign)
    • Master运行的后台线程:LoadBalancer线程,控制region来平衡集群的负载。CatalogJanitor线程,周期性的检查hbase:meta表
  • HRegionServer是RegionServer的实现,服务和管理Regions,集群中RegionServer运行在DataNode
    • HRegionRegionInterface暴露接口:Data (get, put, delete, next, etc.),Region (splitRegion, compactRegion, etc.)
    • RegionServer后台线程:CompactSplitThread,MajorCompactionChecker,MemStoreFlusher,LogRoller
  • HRegion代表table,Region有多个Store(列簇),Store有一个Memstore和多个StoreFiles(HFiles),StoreFiles的底层是Block。

存储设计

  • 在Hbase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Regions,存放Regions的地方叫做RegionServer。Master进程负责处理不同的RegionServer之间的Region的分发。在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储
    • HLog 预写日志文件,也叫做WAL(write-ahead log)
      • MasterProcWAL:HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件
      • WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。
      • 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLog
      • WAL位于/hbase/WALs/目录下
      • MultiWAL: 如果每个RegionServer只有一个WAL,由于HDFS必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量
    • HFile 真实的数据存储文件,HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。
      • HFile生成方式
        • 开始HFile中并没有任何Block,数据还存在于MemStore中。
        • Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。
        • 而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:
        • :如果配置了Data Block Encoding,则会在Append KeyValue的时候进行同步编码,编码后的数据不再是单纯的KeyValue模式。Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。
          在这里插入图片描述

读写简单流程

  • 读写都先请求zookeeper获取meta region位置,再从meta region位置,读取meta region获得数据存储region,最后实现数据读写。
    在这里插入图片描述

region拆分策略

  • 在设置hbase.hregion.max.filesize(默认10G)值时,各拆分算法执行细节。
    • IncreasingToUpperBoundRegionSplitPolicy,0.94默认region split策略。根据公式min(r^2*flushSize,maxFileSize)确定split的maxFileSize,其中r为在线region个数,maxFileSize由hbase.hregion.max.filesize指定。
    • ConstantSizeRegionSplitPolicy,仅仅当region大小超过常量值(hbase.hregion.max.filesize大小)时,才进行拆分。
    • DelimitedKeyPrefixRegionSplitPolicy,保证以分隔符前面的前缀为splitPoint,保证相同RowKey前缀的数据在一个Region中
    • KeyPrefixRegionSplitPolicy,保证具有相同前缀的row在一个region中(要求设计中前缀具有同样长度)。指定rowkey前缀位数划分region,通过读取table的prefix_split_key_policy.prefix_length属性,该属性为数字类型,表示前缀长度,在进行split时,按此长度对splitPoint进行截取。此种策略比较适合固定前缀的rowkey。当table中没有设置该属性,或其属性不为Integer类型时,指定此策略效果等同与使用IncreasingToUpperBoundRegionSplitPolicy。

总结

hbase是大数据领域重要的高效实时查询数据库,肩负着实时数据响应的职责,在海量T、P级数据的快速查询上,有着不可替代的地位。

猜你喜欢

转载自blog.csdn.net/qq_22973811/article/details/112978502
今日推荐