HBase分布式存储系统学习

简介:

  • hadoop的数据库,根据谷歌的bigtable论文实现的
  • 分布式可扩展的大数据存储技术
  • 随机访问 实时读写海量数据
  • 存储数‘十亿行 百万例’的数据
  • 高性能、高可靠、面向列、可伸缩的分布式存储系统
  • HBase的底层也是基于hdfs的
  • 利用zookeeper作为一个协调工作的

HBase到底是什么东西?

  • 分布式开源数据库,基于hadoop文件系统
  • 模仿提供了Goole文件系统的BigTable数据库的所有功能
  • 处理非常庞大的表
    • 数10亿,百万列
    • 利用mr计算数据,利用zookeeper协调资源
  • HBas是非关系型数据库(NoSQL)

行存储和列存储

  • 行存储:mysql oracle底层基于行存储数据的
    • 查询数据需要全表扫描,效率较低
    • 对数据压缩支持不太好
  • 列存储:hbase底层基于列存储数据的
    • 查询数据不需做全表扫描
    • 支持较好的数据压缩

Hbase的特点

  • 可以分布式存储海量的数据
  • 具有容错能力强,数据高可靠的特点
  • HBase是一个列式NoSQL数据库 
  • 数据存储的结构是按照列进行存储 

Hbase的体系结构(模型)

1.逻辑结构(模型)

    • 划分数据集合的概念,和传统的db中的表的概念是一样     
  • 行键
    • 对应关系数据库中的主键,作用就是**唯一标示一行记录**
    • 获取hbase中的一个记录(数据),要通过**行键**来获取
    • 行键是**字节数组, 任何字符串**都可以作为行键 
    • 表中的行根据行键(row key)进行**排序** ,数据按照Row key的**字节序**(byte order)排序存储 
  • 列族
    • 简单的认为是一系列**“列”的集合**
  • 列限定符
    • 或者叫**列** 
    • 每个列簇都可以有多个列
  • 时间搓
    • 在单元格中可以存放**多个版本**的数据 
  • 单元格 
    • 主要用来**存储数据**
    • 单元格的定位要通过**三级定位**才能定位到具体的单元格        

        三级定位  行键+列族+时间戳

2.物理结构(模型)

  • Zookeeper
    • 分布式协调
  • Master
    • HMaster没有单点问题,HBase中可以起启动多个HMaster
    • 负责Table和Region的管理工作
    • 管理用户对Table的增、删、改、查操作
    • RegionServer的负载均衡
    • 调整Region分布,在Region Split后,负责新Region的分配
    • 在HRegionServer停机后,负责失效HRegionServer上的Regions迁移
  • RegionServer
    • RegionServer主要负责响应用户的I/O请求
    • 向HDFS文件系统中读写数据,是HBase中最核心的模块
    • HLohg部分和多个Regoion部分
  • Hlog
    • HLog保存着用户操作hbase的日志
    • 实现了Write Ahead Log (WAL) 预写了日志
    • HLog会删除已存储到StoreFile中的数据
  • Region
    • 保存了行键的固定区域范围的数据
    • 一个Hregion对应一个区域
    • 一个Hregion对应一个Hstore
  • Hstore
    • 对应一个列族
    • 一个HStore包含一个MemStore(内存储)和多个StoreFile
  • MemStore(内存储)
    • 内存储中的一个区域,一个HStore对应一个内存储
    • 当内存储中的内容放不下了,就会刷出到硬盘以一个个的StoreFile存储
  • StoreFile
    • 其实就是数据的存储位置
    • 对HFile的封装
  • Hfile   
    • Hadoop File
    • Hdfs的一个文件对象    

Hbase读写数据的流程

  • Zookeeper(寻找元数据信息)
    • get  /hbase/meta-region-server
  • 找到提供元数据信息访问的regionserver
  • 找“hbase:meta”表,在去查找请求那个regionser来读取数据

Hbase的Shell操作

list_namespace
#列出所有的命名空间(相当于mysql中的show databases)

list_namespace_tables  'ns_name'
#列出指定命名空间下的所有表

create_namespace 'ns1'
#创建命名空间

create 'ns1:t1','f1'
#创建表

disable 'ns1:t1'
#禁用表,因为删除表之前首先需要禁用了

drop 'ns1:t1'
#删除表

put 'ns1:t1','row001','f1:name','xiaohua'
#添加数据

get 'ns1:t1','row001',{COLUMN=>'f1:name'}
#查询数据

delete 'ns1:t1','row001','f1:name'
#删除数据

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值