大数据学习笔记--简单了解hbase

hbase基础

NoSQL(not only sql)

  • 当数据达到几千万甚至几亿条的时候,传统关系型数据库的性能会明显下降
  • CAP定理:
    • CAP定理即Consistency Availability and Partition tolerance
      • Consistency(强一致性):数据更新操作的一致性,所有数据变动都是同步的
      • Availability(高可用性):良好的响应性能
      • Partition tolerance(高分区容错性):可靠性
    • 所谓CAP定理即任何分布式系统只可能同时满足两点,不可能兼顾三者
  • 有些数据库再实现性能的时候会牺牲一部分一致性,即数据再更新的时候,不会立即同步,如你发了一条朋友圈,你的一部分朋友立马看到了这条信息,而另一部分朋友可能要等到1分钟之后才能刷出这条消息。虽然有延时,但是对于这样一个社交的场景,这个延时是可以容忍的。
  • nosql数据库最初指的是不适用sql标准的数据库,现在泛指非关系型数据库
  • nosql数据库意味not only sql,意为不仅仅是sql。很多时候nosql和传统关系型数据库是相辅相成的,谁也不能替代谁

HBase的定义与特点

定义
  • hbase是一种分布式、可扩展、支持海量数据存储的nosql数据库
  • hbase面向列存储,构建与hadoop之上类似于Google的BigTable,提供对10亿级别表数据的快速随机实时读写!
特点
  • 海量存储
    • hbase可以存储pb级别的海量数据,再pb级别的数据及廉价pc存储的情况下,仍然可以在几十到百毫秒内返回数据,这是因为hbase有着良好的可扩展性
  • 列式存储
    • hbase的列式存储其实是列族存储,hbase通过列族储存数据,列族下面可以有非常多的列,列族在创建表的时候就必须指定
  • 极易扩展
    • hbase的扩展性体现在两个方面:
      • 基于上层处理能力(RegionServer)的扩展
      • 一个是基于存储的扩展(HDFS)
    • 通过横向添加RegionSever的机器,进行水平扩展,提升HBase上层的处理能力,提升Hbase服务更多Region的能力
  • 高并发
    • 由于目前大部分使用HBase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,HBase的单个IO延迟下降并不多。能获得高并发、低延迟的服务
  • 稀疏
    • 稀疏主要针对的是hbase列灵活的特点,在列族中你可以指定任意数量的列,在列为空的情况下不会占用内存
hbase的优点
  1. hdfs有着高容错、高扩展的特点,基于其实现数据存储的hbase同样有着与生俱来的超强的扩展性和吞吐量
  2. hbase采用kv对的方式存储数据,这意味着即使面临海量数据的增长,也不会导致查询性能的下降
  3. hbase是一个列式数据库,相对于于传统的行式数据库而言。当你的单张表字段很多的时候,可以将相同的列(以regin为单位)存在到不同的服务实例上,分散负载压力
hbase的缺点
  1. 架构设计复杂,且使用HDFS作为分布式存储,因此只是存储少量数据,它也不会很快。在大数据量时,它慢的不会很明显
  2. Hbase不支持表的关联操作,因此数据分析是HBase的弱项。常见的 group by或order by只能通过编写MapReduce来实现
  3. Hbase部分支持了ACID
hbase的结构:

在这里插入图片描述
在这里插入图片描述

hbase的数据模型

  • namespace
    • 命名空间,类似关系型数据库中的数据库,每个命名空间下有多个表。
    • HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间
  • table
    • 类似关系型数据库中的表,不同的是,HBase定义表时只需要声明列族即可,数据属性,比如超时时间(TTL),压缩算法(COMPRESSION)等,都在列族的定义中定义,不需要声明具体的列
  • row
    • Base表中的每行数据都由一个RowKey和多个Column(列)组成
    • 一行包含多个列,这些列通过列族进行分类,行中的数据所属列族只能从该表所定义的列族中选取,不能定义这个表中不存在的列族
  • rowkey
    • Rowkey由用户指定的一串不重复的字符串定义,是一行的唯一标识
    • 数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要
    • 如果使用已经用过的rowkey,则会直接覆盖之前的数据
  • column family
    • 列族是多个列的集合
    • 一个列族可以灵活的定义多个列
    • 表的相关属性大部分都定义在列族上,同一个表里的不同列族可以有完全不同的属性配置,但是同一个列族内的所有列都会有相同的属性
    • 列族存在的意义是HBase会把相同列族的列尽量放在同一台机器上,所以说,如果想让某几个列被放到一起,你就给他们定义相同的列族
    • 对于每个表来说,列族越少越好
  • column qualifier
    • Hbase中的列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族。因此列必须依赖于列族存在
    • 因为HBase中的列全部都是灵活的,可以随便定义的,因此创建表的时候并不需要指定列
    • 对于当前行来说,其他行有那些列是不确定的,只有扫描数据才能得知
  • timeStamp
    • 用于标识数据的不同版本(version)。时间戳默认由系统指定,也可以由用户显式指定
    • 在读取单元格的数据时,版本号可以省略,如果不指定,Hbase默认会获取最后一个版本的数据返回
  • cell
    • 一个列中可以存储多个版本的数据,每个版本就被称为一个单元格(cell)
    • cell由rowkey、column family、column qualifier、time stamp确定
    • cell中的数据是没有类型的,全部是字节码的形式
  • region
    • refion由一个表的若干行组成,在region中行按照rowkey的字典顺序进行排列
    • Region不能跨RegionSever,且当数据量大的时候,HBase会拆分Region
    • Region由RegionServer进程管理。HBase在进行负载均衡的时候,一个Region有可能会从当前RegionServer移动到其他RegionServer上
    • Region是基于HDFS的,它的所有数据存取操作都是调用了HDFS的客户端接口来实现的

hbase的基本架构

  • 架构角色
    • region server
      • regionServer是一个服务,负责多个数据的管理,其实现类为HRegionServer
    • Master
      • Master是所有Region Server的管理者,其实现类为HMaster
    • Zookeeper
      • RegionServer非常依赖ZooKeeper服务,ZooKeeper管理了HBase所有RegionServer的信息,包括具体的数据段存放在哪个RegionServer上
      • 客户端每次与HBase连接,其实都是先与ZooKeeper通信,查询出哪个RegionServer需要连接,然后再连接RegionServer
    • HDFS
      • hdfs为hbase提供了底层数据存储的服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值