简介:
- 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'
#删除数据