Hbase 的相关原理

hbase架构

Hbase是主从架构:
主:hmaster
从:hregionserver
hregionserver 里面存储的是一个个 region

hbase中的核心概念

region 分区
  • 每一个表的数据, 都需要划分为多个region
  • region 是对hbase表在行的方向上的划分,一个region代表的是一个表中的多行数据,或者说是一定行健范围的数据(数据是连续的)。
  • region 是hbase进行 分布式存储的最小单位,负载均衡的最小单位,不是物理存储的最小单位。
  • 一个region不可再进行分割。在进行分布式存储的时候,一个region最终只能存储在一个hbase 节点上(hregionserver);一个hregionserver 上可以存储多个region。
    在这里插入图片描述
  • 每一个hbase表进行创建的时候,默认只有一个region
  • 刚开始进行数据插入的时候,操作只是在这一个region上进行。随着数据插入,数据量不断增加,当数据量达到一定的大小的时候,必然进行region的split(切分)。一个region切分为2个region,一旦切分完成,就会面临新的region的重新分配,hmaster决定每个region存储在哪一个hregionserver(节点)上。原来的老的region 需要下线。
  • 每一个region到多大进行split?在hbase的配置文件中,已经配置了。
    <property>
    <name>hbase.hregion.max.filesize</name>
    <value>10737418240</value>
    <description>
    Maximum HStoreFile size. If any one of a column families' HStoreFiles has
    grown to exceed this value, the hosting HRegion is split in two.</description>
    </property>

每一个region中一个列族的物理文件达到10G 才进行切分

  • 切分时候 如何切分?按照rowkey的中间值进行切分
  • 每一个region 都会有一个全局唯一的一个编号。
  • 一个表可能对应多个region
  • 一个region可能对应多个物理文件(一个列族对应一个物理文件)
  • 物理文件最终存储在hdfs上

安装hbase时,在hbase-site.xml上配置过

<property>
        <!-- 指定 hbase 在 HDFS 上存储的路径 -->
        <name>hbase.rootdir</name>
        <value>hdfs://bd1904/user/hbase</value>
</property>

所以一个region在hdfs上的路径为:/user/hbase/data/default/user_info/313c7bb8491d6207ac0153c0392cc392(region编号)

  • 刚开始进行hbase表数据插入操作时候,在这个region分裂之前,所有操作的都是这一个region上进行。操作只在一个regionserver进行这种现象在另一个层面,也被称为数据热点。
  • 如何解决数据热点? 在建表的时候 进行表预分区(region),也就是建表的时候,指定多个分区。
  • 如何操作? 可以通过api或者shell操作。shell操作时,指定splits。eg:SPLITS => [‘10’, ‘20’, ‘30’, ‘40’]
  • 预分区之后,在插入数据的时候,应尽量避免 数据的rowkey顺序递增。

hbase中的数据热点:

  • 客户端在进行数据操作(读或写)的时候,频繁地操作某一个或某几个region,造成这个region所在的regionServer(节点)拥挤,成为热点。
  • 数据热点产生的根源:经常访问的数据被集中分配在了某一个或者某几个region上了。
  • 所以在hbase的操作过程中,要尽量避免数据热点。
store
  • 一个Store对应一个列族.,是hbase 物理存储的最小单元。
  • 1个region可能对应多个Store,一个store对应一个 列族
  • 进行存储的时候,一个Store,包含一个memestore 和 0~多个 storefile
    在这里插入图片描述
memoryStore
  • 每一个store中,都会有一段内存存储空间。
  • 写入数据的时候,每一个Store中的数据,都会先写入到memstore
  • 读取数据的时候,先从内存中读取。即 memoryStore
storeFile
  • storefile就是文件,磁盘文件。
  • memstore 中达到一定的阈值时候,就会进行数据flush,形成一个个的storefile。

在hbase-default.xml中已经配置好了。

<property>
    <name>hbase.hregion.memstore.flush.size</name>
    <value>134217728</value>
    <description>
    Memstore will be flushed to disk if size of the memstore
    exceeds this number of bytes.  Value is checked by a thread that runs
    every hbase.server.thread.wakefrequency.</description>
</property> 

memstore 达到阈值128M的时候,就会进行flush。

  • storefile 是 hbase中的数据,是一个中间存储结果。
hfile

hfile文件 是storefile文件写入到hdfs上的最终文件

wal
  • write-ahead-log :写前日志文件,或者叫 预写日志文件,有时候也写作 hlog
  • 为了防止memstore中的数据丢失, 做容错用的。
  • 写入数据之前,会先将数据操作写入到 wal中,一旦数据写入成功,就会将数据写入wal-old
  • 一个regionserver中会存储一个wal文件。
  • 因为一个regionserver中会存储多个region,所以同一个regionserver的所有的region公用一个wal。便于日志文件管理。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值