hbase架构详解

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

        1、Hbase的原型是GoogleBigTable论文,受到该论文思想启发,目前作为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:在我们写数据时首先是写到内存,然而为了防止数据没写到内存,我们会写一份hloghdfs

        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。 

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

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值