Hbase

作者: 笔头还没烂 | 来源:发表于2022-08-21 09:46 被阅读0次

    起源
    早期需求:能实现大量数据的存储和计算。(能实现即可)
    现在需求:大数据要达到一个实时应用的效果,实时推荐系统、实时监控、机器学习
    规则:数据的价值会随着时间而逐渐流失,要想追求数据价值的最大化,必须构建实时。
    实时采集:Flume、Canal
    实时存储:Kafka
    实时计算:Flink、StructStreaming
    实时应用:Redis【数据量小】、Hase【数据量大】
    ps :一般分布式架构会采用下面两种:
    (1)Lambda 架构:离线、实时、服务层
    (2)Kappa架构:实时

    Hbase :Hadoop database 的简称
    Google :前三篇论文(谷歌的 21 世纪的前三驾马车):
    GFS : HDFS
    MapReduce :MapReduce
    BigTable【Chubby】: Hbase + Zookeeper

    官网链接:
    https://hbase.apache.org/
    官网介绍:
    当您需要对大数据进行随机、实时的读/写访问时,请使用 Apache HBase™。该项目的目标是在商用硬件集群上托管非常大的表——数十亿行 X 数百万列。Apache HBase 是一个开源、分布式、版本化、非关系型数据库,模仿 Google 的Bigtable: Chang 等人的结构化数据的分布式存储系统。正如 Bigtable 利用 Google 文件系统提供的分布式数据存储一样,Apache HBase 在 Hadoop 和 HDFS 之上提供了类似 Bigtable 的功能。
    小结:
    (1)应用场景:当你需要随机实时读写访问你的大数据的时候
    (2)可以基于一个通用化的集群来实现管理一个大表
    (3)特点:开源、分布式、多版本、非关系型,基于 HDFS

    问题0:HDFS 明明是一个离线分布式文件系统, Hbase 基于 HDFS 实现存储,那为什么 Hbase 能实现实时呢?
    写:只写分布式内存
    读:先读内存,如果内存中没有,就读HDFS,通过很多的设计保证读HDFS也很快。这些设计包含但不限于以下几种方式:
    (1)索引:基于索引加快查询
    (2)分区:按照一定规则存储文件的数据,可以基于规则快速定位在哪个文件中
    (3)二进制文件
    (4)缓存机制

    简单介绍

    定义:分布式的实时随机的大数据读写的NoSQL数据库系统
    (1)可扩展的大数据存储:分布式
    (2)随机实时的访问大数据:基于内存存储
    功能:提供分布式的实时随机的大数据持久性存储【读写】
    (不适合做缓存。像 Redis 做读缓存、Kafka 做写缓存,而 Hbase 是做持久性存储)
    应用:大数据量、高并发、高性能的结构化数据列存储【读写】
    · 电商:订单
    · 交通:实时监控、实时车辆轨迹
    · 金融:交易信息
    · 工作:
    (1)实时:可以用于实时处理中间结果的存储、实时计算的最终结果的存储【数据量大】;
    (2)离线:用于离线系统中与Hive集成,将Hive表的数据存储在Hbase,提升查询性能

    问题1:为什么Hbase读写速度比较快?
    · Hbase使用内存提供数据存储和读写;
    问题2: 为什么Hbase 可以支持大数据量?
    · Hbase 基于分布式磁盘来存储和读写:直接依赖于 HDFS

    核心思想:

    数据存储:分布式内存+分布式磁盘
    问题:写入数据的时候,到底是写内存还是写磁盘呢?
    应用场景:实时,数据一产生写入,就立即要被读取计算
    · 刚产生的数据:大概率需要用到的数据;
    · 已经产生很久的数据:大概率很少会用到【冷热分离】
    思想:将刚产生的数据写入分布式内存,内存存储达到一定阈值,将内存中的数据写入分布式磁盘。
    写:只写内存,内存如果达到阈值,自动将内存的数据写入磁盘
    读:先读内存,实时场景下,刚写入就会被读取,读写只经过内存,速度很快

    Hbase 与 HDFS 有什么区别?
    HDFS:分布式文件系统【文件】、离线、分布式磁盘、大数据量永久性存储
    Hbase:分布式NoSQL数据库【表】、实时、分布式内存+分布式磁盘【HDFS】、大数据量永久性存储

    Hbase 与 MySQL 有什么区别?
    · Hbase : NoSQL【非关系型】,不支持SQL语句,仅支持单行事务操作,分布式存储,存储是结构化和半结构化数据【每一行拥有不同的列】,不支持join,面向列【最小操作单元】的NoSQL数据库
    面向列存储工具:最小操作单元为列
    每一行的列可以不固定,不同的行可以拥有不同的列
    实现:物理层是怎么实现的?实际上,Hbase表中的每一列对应一个KeyValue,而每一行对应多个KeyValue

    # Hbase 中行是逻辑的概念,对应着物理上的多行,有几列就有几行
    # Hbase 中列是逻辑的概念,对应着物理上的的一行,是一个 KV
    K                 V
    表名+行号+id        1
    表名+行号+name      laoda
    表名+行号+age       18
    

    · MySQL:RDBMS【关系型】,支持SQL语句,支持多行事务操作,中心化存储,存储主要是以结构化数据为主,支持join,面向行【最小操作单元】的数据库
    面向行存储工具:最小操作单元为行
    每一行的列都是固定的,哪怕这一行的列没有值,它有这一列,默认为null。

    Hbase 与 Hive 有什么区别?
    共性:底层都基于HDFS,都做为 Hadoop 系列的存储
    Hbase:基于 Hadoop 的软件,数据库工具,hbase 是NoSQL存储容器,延迟性较低,接入在线实时业务
    Hive :基于 Hadoop 的软件,数仓工具,Hive 延迟较高,接入离线业务,用于OLAP 操作.

    Hbase中的对象概念

    Hbase中的数据库概念 NameSpace

    NameSpace:命名空间,等同于数据库的的Database的概念
    Hbase 中的任何一张表都必须属于某个NameSpace
    使用:Hbase 没有切换 NameSpace的命令,访问所有表只能使用Namespace:TableName方式来访问表
    · MySQL : 访问一张表,有两种方式

    方式一:先切换数据库:user dbname; 再访问表:select * from tbname;
    方式二:绝对路径访问:select * from dbname.tbname
    

    · Hbase:只支持绝对路径访问

    scan nsname:tbname
    

    理解:把Namespace当做表名的前缀来看,只要访问表名必须加ns
    特例:Hbase 中默认自带了一个 default 的数据库,如果访问这个数据库中的表不用加,可以直接给表名

    Hbase中表的概念Table
    概念:表的概念,等同于数据库中的表的概念
    使用:
    Hbase中的表是分布式的:表的数据分布式存储在不同的机器上
    · 数据存在表中,Hbase 是分布式存储
    · Hbase 的表是一个分布式逻辑对象:一个表可以划分多个分区Region存储,默认情况下一张表只有一个分区
    · 写入这张表的数据根据分区规则写入不同的分区

    类似于HDFS中的文件,类似于Kafka的 topic
    

    · Hase是分布式存储【读写】,读写是操作表

    小结:
    (1)Hbase 功能:分布式的基于Hadoop的NoSQL数据库,提供大数据量的持久性存储,以及分布式实时、随机的大数据量的读写
    (2)场景:大数据量实时数据读写,目前实时场景中用于存储实时处理的数据;离线场景中搭配 Hive 来实现,提高离线的性能。
    (3)设计:分布式大数据量实时数据读写、面向列存储
    大数据量怎么能提供实时?基于HDFS来实现大数据量,基于分布式内存来提供实时效果
    读写到底读HDFS还是内存?写只写内存【进程内存】,内存达到阈值刷写到HDFS,读先读内存,内存没有再读HDFS。【为了保证内存数据的安全性,Hbase会在写数据到内存的过程中,同时构建内存操作日志,类似于 Redis 的AOF,也类似于HDFS的 edits 文件,以及MySQL的binlog】
    面向列存储:Hbase中数据表的最小操作单元为列。本质上表的列是逻辑的,物理上每一列就是一个KV.

    相关文章

      网友评论

          本文标题:Hbase

          本文链接:https://www.haomeiwen.com/subject/xybvgrtx.html