0


hbase架构详解

一、什么是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架构图详解


hbase架构图​​​​​

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。**

如果有总结不到位的地方,大家可以评论留言,再次完善。

标签: flink

本文转载自: https://blog.csdn.net/qq_66563605/article/details/126757528
版权归原作者 秃头小宝贝儿i 所有, 如有侵权,请联系我们删除。

“hbase架构详解”的评论:

还没有评论