HBase介绍

一、HBase引入

  1. 概述
    Hadoop生态系统中的一个分布式、可拓展、面向列、可伸缩,具有自动容错功能的数据库。
    NoSQL数据库
    场景: 对海量数据进行随机读写、实时查询(对上亿条数据能够在秒级进行访问)
    表:上亿行百万列 ———TB级别甚至PB级别
    设备:廉价的商用服务器
    HBase:真正存储数据还是在HDFS,数据分析处理还是依赖于MapReduce
    二、HBase的表
    Table 逻辑模型:
    rowkey 行键 --> 类似于RDBMS的主键,唯一标识一行记录
    根据rowkey进行排序
    列簇column family: 创建HBASE表的时候要预先指定,类似于schema的概念
    cf1、cf2、cf3、cf4
    列标签: column qualifier
    列标签可随意添加,真实使用的时候,根据具体业务来定义,由业务来进行约束。
    列标签在不同行的同一个列簇下是可以不相同的。
    timestamp:时间戳,单元格的版本号
    单元格: {table、rowkey、column family、column qualifier、timestamp} --> value
    hbase的Update:并不是真正意义上对原来的数据进行修改,仅仅只是做了新增操作,只是新增了一个单元格,与原来的单元格仅仅只是时间戳和value不同。
    Table物理模型:
    HBase组件:
    1)HMaster:
    (1)主节点
    (2)为Region Server分配Region
    (3)发现失效的Region Server并重新分配其上的region
    (4)管理用户对HBASE表的增删改查操作
    (5)数据不经过Master
    2)Regionserver:
    (1)HBase表的分区
    (2)按照行 rowkey将表数据进行划分,每划分出来的部分称为region,HBASE负载均衡的最小单元。
    默认情况下,表创建时只有一个Region,而且Region空间大小默认是256M。
    随着数据的增加,Region会自动切分,均分成两个Region。
    (3)负责region,处理对这些region的IO请求

3)Zookeeper
(1)通过选举,保证任何时候,急群众只有一个master,Master与Region Servers启动时会向Zookeeper注册
(2)存储Region的寻址入口:
Zookeeper上面存储hbase:meta这张表有哪些region,这些region在哪些RegionServer上面,Region包含哪些rowkey
zk上 /hbase/meta-region-server
(3)表由哪些Region,这些Region在哪些RegionServers上,Region包含哪些rowkey(起始rowkey,截止rowkey)
这些信息,HBASE有张默认的系统表
hbase:meta 元数据表,记录以上描述的信息。和普通表是一样的
(4)实时监控Region server的上线和下线信息,并实时通知给Master
client -> zookeeper
(1)从/hbase/meta-region-server节点获取关于hbase:meta表的信息,hbase:meta这张表有哪些region,这些region分布在哪些RegionServer上,每个Region包含哪些rowkey
(2)从获取到RegionServer信息,直接连接到该RegionServer上,hbase:meta表数据,获取到test表相关信息
(3)从test表获取真正数据
Region内部结构:
Region根据表的Column Family列簇划分Store,
Store: MemStore,StoreFile
put ‘test02’, ‘25’, ‘cf1:name’, ‘value222’
1)访问zookeeper获取hbase:meta表的位置信息
2)访问hbase:meta表的数据,获取到test02的位置信息
3)访问test02表
(1)根据rowkey找到对应的region
(2)根据cf1列簇名称找到Region中Store
(3)插入到Store里面MemStore
(4)MemStore达到最大空间值,刷写到磁盘生成一个StoreFile(本质就是HFile)。
滚动刷写:当MemStore空间满后,HBASE另外分配一块MemStore来接收数据,而原来的不再接收新数据,只是在进行持久化到磁盘的操作。
MemStore:一块内存空间,默认128M。
StoreFile:物理是上DataNode上的一个block
Region的容错:
Region的数据本质是HDFS上的文件,(备份),所有Region上的数据其实是由备份的。
只要Region的信息还在,Region就可以在其他RegionServer上重生。
当正在往memstore写数据时,RegionServer挂掉;数据丢失。
WAL机制: Write Ahead Log
HLog: 本质也是一个HDFS文件。当memstore将数据刷写到磁盘上生成storefile后,对应的数据也会从HLog上删掉。
hbase往memstore写数据,写到HLog(顺序写),再往memstore上写。
HLog日志文件,HLog始终是与MemStore中的数据一致,
hdfs block是一个逻辑概念
三、HDFS上的HBASE
/hbase
/WALS —>HLog文件存储路径
/data —> HBASE表数据存储路径
/oldWALS —> 当MemStore将数据刷写到磁盘生成StoreFile时,HLog会将对应的这部分数据移到oldWALs中,后面再进行删除。
1)rowkey设计:
(1)唯一性
(2)长度: 最大64kb。rowkey是hbase中表数据冗余产生的因素
10~100 字节
最好 8字节 16字节 64位操作系统
(3)散列原则:
假如 时间戳_用户ID 作为rowkey
10亿用户同时发微博,
1456777_000001
1456778_000002
1456778_100000
问题: 集中到某个region,造成这单独几个region负载量偏大,而其他region完全没有负载
散列: 尽量将某一时刻内的数据均衡分散到所有Region中(大部分Region)中
热点现象:数据在某一个时刻集中存储到某一两个Region上
rowkey设计规范;
方便查询,尽可能将查询字段放到rowkey,HBase根据rowkey查询速度是最快。
2)列簇设计:
HBase面向列簇存储
region起始rowkey — 终止rowkey范围内一个列簇下的数据
hdfs上的一个文件
StoreFile === HFile
跨列簇查询,速度相对较慢
一般设计一到两个列簇
HBase中的缓存
memstore: 写缓存
blockcache:块缓存,读缓存
HBase表单元格版本号:插入数据的时候如果没有单独制定,系统默认使用时间戳作为版本号。也可以自己制定时间戳。
四、 HBase性能调优

  1. JVM内存调优
    MemStore内存空间,设置合理大小
    memstore.flush.size 刷写大小 134217728 = 128M
    memstore.mslab.enabled
    preclose.flush.size
    JVM堆内存
    初生代内存空间:数据停留时间较短 128~512M -Xmn128M
    老生代内存空间:数据停留时间比较长,几GB
    内存碎片 GC清理 -->进程停顿
    当垃圾过多,GC进程限制应用程序进程的进行
    GC垃圾回收策略:
    Parrallel New Collector垃圾回收策略
    Concurrent Mark-Sweep Collector 并行标记垃圾回收器
  2. 本地MemStore缓存
    数据从MemStore刷写到磁盘上,MemStore空间就会留下随便(内存孔洞)
    GC对这些随便进行清理
    内存孔洞,重复使用
    预先设置固定大小的内存孔洞,下次数据写进内存,根据数据的大小找到合适之前预先设置好的后者留下来的内存孔洞,写进去。
    缺点:占用大量的内存空间
    hbase.hregion.memstore.mslab.enabled 开关
    大小 2M
  3. 拆分与合并
    split: Region分割 Region大小增大一定大小
    hbase.hregion.max.filesize 只要region中的任何一个StoreFile大小默认上限 10GB
    Region
    –>拆分成平均大小的两个小的Region
    –>Region1 -->接收数据 -->又继续拆分
    –>Region2
    HBase表数据量连续增长非常快,拆分过程频繁进行,明显降低HBase表的读写性能
    解决办法: 将hbase.hregion.max.filesize 设置大一点
    手动执行split命令进行拆分,选择业务发生量最小的时刻
    compact 合并:
    memstore刷写数据到磁盘,生成StoreFile(HFile),
    HFile好多小文件,造成HBase读性能不高,HBase内部有合并机制。
    合并为了优化读性能
    合并:
    minor compact: 只是简单将同一个Store中小的StoreFile合并成大的StoreFile
    major compact: 将整个HBase表的StoreFile进行大范围的合并,真正进行删除数据,另外也对过期的数据进行移除。
    HBase删除数据,并没有立即删除,其实只是打了个删除标记。
    手动进行ajon compact
    hbase.hregion.majorcompaction 默认七天
    hbase.hregion.majorcompation.jitter 浮动
    根据业务具体情况来决定如何进行优化拆分与合并
  4. 预创建Region
  5. 负载均衡
  6. 热点现象
    rowkey优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值