博客 Hbase架构详解

Hbase架构详解

   数栈君   发表于 2023-09-04 10:16  309  0

一、什么是Hbae(Hbase的介绍)?


1、Hbase的原型是Google的BigTable论文,受到该论文思想启发,目前作为hadoop的子项目来开发维护用来支持结构化的数据存储。
    
2、Hbase是一个高可用、高性能、面向列、可伸缩的分布式存储系统。

二、Hbase的特性


1、海量存储:Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。

2、列式存储:这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。

3、极易扩展:

Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。

4、高并发:由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。

5、稀疏:稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

三、Hbase架构图详解


http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/57659085475a624d28f5aa25fe1be7c7..png
  

Hbase架构详解:

0、Client:提供访问hbase的接口

1、Hmaster:处理Hregion的分配或转移。如果Hregion的数据量过大,Hmaster会对拆分后的Region重新分配RegionServer。(如果发现失效的HRegion,也会将失效的HRegion分配到正常的HRegionServer中)

2、zookeper:存储hbase的原数据(meta表)

3、HRegionServer:它是处理客户端的读写请求,负责与HDFS底层交互,是真正干活的节点。

4、Hlog:在我们写数据时首先是写到内存,然而为了防止数据没写到内存,我们会写一份hlog到hdfs

5、Hregion:它里边会有多个store,每个store相当于一个列族

6、Store:相当于列族下边的列(当然一个列族下边可以有多个列)

7、Memstore:数据首先会写到我们的Menstore里边(相当于一个内存可以设置它的大小以及阈值,当存满或者到达它的这个阀值,就会刷写到我们的硬盘上)

8、StoreFile:当Memstore存满之后,剩余的刷写到硬盘(storefile、hflie这两个本质上是一个东西)在hbase中它叫storefile

9、Hfile:在hdfs中它叫hfile

Hbase架构总结:


首先client客户端是数据进入hbase的接口,经过zookeper元数据分配数据所需要进入的regionserver,进入regionserver先经过hlog预写入hdfs中存储,regionserver管理者hmaster分配的region进入磁盘中如果memstore达到一定阀值切分成Hfile传入hdfsclient中进行小文件合并成大文件,最后传入hadoop datenode中

如果regionserver出现宕机会通过zookeeper向Hmaster请求重新创建一个Hregionserver将宕机的regionservr中的region分配给新建的regionserver中,还有一种情况就是region中的store的大小和数量达到一定阀值会分配出一个region分配给其他regionserver达到负载均衡的表现。

四、自定义hbase


public class HBaseSinkFunction extends RichSinkFunction<OrderGoodsWideEntity> {
    Connection connection = null;

    @Override
    public void open(Configuration parameters) throws Exception {
        super.open(parameters);
        org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum","hadoop101:2181,hadoop102:2181,hadoop103:2181");
        connection = ConnectionFactory.createConnection(conf);
    }

    @Override
    public void invoke(OrderGoodsWideEntity value, Context context) throws Exception {
        //获取核心操作对象
        Admin admin = (HBaseAdmin)connection.getAdmin();
        //获取操作表名
        Table table = connection.getTable(TableName.valueOf("orderDetail"));
        //向表中插入数据
        //输入参数遍历存入hbase
        //行键
        Put put = new Put(Bytes.toBytes(value.getOrgId()));

        //列族,列名,值
        put.addColumn(Bytes.toBytes("columns"),Bytes.toBytes("areaId"),Bytes.toBytes(value.getOrderId().toString()));
        table.put(put);
    }

    @Override
    public void close() throws Exception {
        super.close();
        connection.close();
    }
}

五、在我们大数据开发中为什么使用hbase存储数据?


首先hbase是支持OLAP(在线分析)操作的,并且hbase读取速度快,方便调用,做后边分析处理的一个数据存储框架,当然也有弊端,不支持复杂sql的查询,需要借助phoeinx。



免责申明:


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群