HBase学习笔记 之一

概述

  • HBase是基于hadoop的分布式的,可扩展的,能够存储大量的数据的菲关系型数据库
  • 列存储思想–优势读取速度快 ; 容易扩展(RegionServer,HDFS)
  • HBASE不支持SQL,没有主键;
  • 存储的数据是稀疏的,适合存储结构化或者 半结构化的数据
  • HDFS上的数据时不能修改的,HBase实现修改数据其实也是追加操作(更新完毕后 有一个时间戳作为版本信息)
  • HBASE中的元数据包括:namespace,table .column-family,table-HRegion

在这里插入图片描述

部署结构

Hbase中有两种部署结构:Master RegionServer服务器
Mater服务器一般只有一个,RegionServer有多个服务器;Master 服务器负责维护表的结构信息 **实际的数据存储在RegionServer中(HDFS);即使Master挂掉集群也能查询数据,知识不能新建表了

基本概念

在这里插入图片描述

  • 行键:Rowkey
    • 类似于RDBMS中的主键
    • 行键是在添加数据时指定的,而非创建时指定‘’
    • 行键默认是按照字典排序
  • ColumnFamily:列族(簇)
    • 一个表中至少有一个列族(不限制数量,但列族不建议超过三个会影响效率)
    • 列族也是在添加数据的时候动态增删的;而非创建表时指定
  • Column :列
    • 列是可以动态增删的 q
    • 列从属于列族
  • cell :单元
  • 通过行键+列族+列+版本是锁定一条数据的唯一条件
  • 默认只获取最后一个版本的cell
  • namespace:名称空间
    • 类似于数据库database
    • 在实际的不同项目中对应不同的namespace
    • 不指定默认为default

基本命令

  • 建表:
    • create ‘person’,{NAME =>‘basic’},{NAME => ‘info’} 或者简写 create ‘person’, ‘basic’,‘info’;
  • 添加数据 name列 值为 ‘欧阳娜娜’
    • put ‘person’ ,‘p1’,‘basic:name’,‘欧阳娜娜’;
  • 获取数据
  • get ‘person’ ,‘p1’; 获取行键为p1对应的值
  • get ‘person’ ,‘p1’,{COLUMN => ‘basic’} 或者 get ‘person’,‘p1’ ,‘basic’; 获取行键p1,列族 basic对应的值
  • get ‘person’ , ‘p1’ , ‘basic:age’
  • 扫描person表
  • scan ‘person’
  • scan ‘person’, {COLUMNS => [‘basic’,‘info’]}
  • 删除操作
    • deleteall ‘person’ , ‘p1’;
    • drop ‘person’
  • 查看所有表 list
  • 启用表:enable ‘student’;
  • 指定每一个列族所能对外提供的历史版
    本数量
    create ‘person’, {NAME => ‘basic’,
    VERSIONS => 3}, {NAME => ‘info’,
    VERSIONS => 5}
  • 指定扫描的历史版本数量
    • scan ‘person’, {COLUMNS => ‘basic’,
      VERSIONS => 3}
  • create_namespace ‘hbasedemo’ 创建名称空间
    create ‘hbasedemo:person’, ‘basic’,
    ‘info’;
  • list_namespace_tables ‘hbasedemo’ 查看指定名称空间下的表
  • drop_namespace ‘hbasedemo’ 删除指定名称空间。要求这个名称空间
    为空

基本理论

存储结构

在这里插入图片描述

  • 在行键方向上切分一个或多个HRegion,每一个都由HRgionServer来管理(标的增删改查)

  • 由于行键是按照字典排序的,所以HRgion的范围是不交叉的

  • HMaster来监控HRegionServer,HRegionServer中可以包含多个Region 每个Region中包含不同的Store(是根据列族来划分的)

  • Store中有一个MemStore(内存存储,用来保存当前数据的才操作)和多个Hfile(实际的存储单位,最后存放到

  • HDFS中)

  • Zookeeper的作用

    • zookeeper是HBASE整个架构中一个重要的角色,Hbase在第一次启动的时候回在ZK上注册一个持久节点/hbase
    • ActiveMaster启动会在ZK注册一个临时节点/hbase/master;Backup Hmaster会注册一个临时子节点/hbase/backup-master
    • ZK会监控/hbase/master, 当master宕机,会从Backup Hmater中挑选一个作为master;由于master是一个临时节点
      所以宕机后会消失;
    • activeMaster会监控BackupMasters,确定给那个节点进行数据同步
    • HRegionServer会在启动的时候注册临时子节点 /hbase/rs
  • HMaster

    • 可以再任意一个节点中启动Hmaster
    • 当出现多个HMaster的时候,HMaster的启动顺序决定了HMaster的状态:先
      启动的HMaster是Active状态,后启动的HMaster就是Backup状态
    • 虽然可以启动任意多个HMaster,实际过程中HMaster的个数不超过3个,因为
      HMaster之间要进行数据的同步,当HMaster节点个数过多的时候,会影响执
      行效率;
    • HMaster的职责
      • 管理HRegionMaster
      • 管理表结构(DDL)但是对于表的操作不经过HMaster
    • Master通过心跳机制来维系在Zookeeper上的节点,心跳间隔默认是180s,
      实际过程中会将这个事件缩短为10-30s;
  • HRegionServer和DataNode部署在相同的节点上 在这里插入图片描述

BlockCache:
BlockCache本质上是一个读缓存,这个读缓存是维系在内存中

  • i.BlockCahe默认是128M大小
  • ii.时间局部性:当一条数据被读取之后,那么HBase会认为这条数据被
    再次读取的概率要大于其他未被读取数据的概率,那么这个时候
    HBase会将这条数据缓存 - 读过的数据就会被缓存
  • 1)空间局部性:当一条数据被读取之后,那么HBase会认为这条数据相
    邻的数据被读取的概率比其他数据高,那么HBase会将这条数据相邻
    的数据也进行缓存
  • 2)读缓存在缓存的时候采用了"局部性"原理:
  • iii.当读缓存用满之后,在清理数据的时候,采取了LRU策略
读写流程

在这里插入图片描述

在HBase0.96开始:
在这里插入图片描述
少了-ROOT-文件,减少了请求次数 ,当客户端读取.meta.文件之后会缓存.meta.文件中的内容缓存越多效率越高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值