【HBase一】HBase概述

 

1. Hadoop生态系统


【HBase一】HBase概述
 

  • 底层是存储(HDFS),上层是计算框架
  • 从图中可以看出,Hive、Pig和Mahout是基于MapReduce的计算框架,分别用于结构化数据的即席查询,数据流处理以及基于MapReduce的机器学习算法集
  • HBase依赖于HDFS,HBase这个圆角矩形框在高度上= MapReduce + 基于MapReduce的计算框架,这是不是说,HBase一部分是跟MapReduce平级,属于基础框架级,同时又提供了应用级的能力

2. 什么是HBase

  • HBase是基于Apache Hadoop的面向列的NoSQL数据库,是Google的BigTable的开源实现。
  • HBase是一个针对结构化数据的开源的、多版本的、可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
  • HBase提供了对大规模数据的随机、实时读写访问
  • HBase的目标是存储并处理大型的数据,更具体地说仅用普通的硬件配置,能够处理上千亿的行和几百万的列所组成的超大型数据库。
  • HBase是一个开源的、分布式的、多版本的、面向列的存储模型。可以直接使用本地文件系统也可使用Hadoop的HDFS文件存储系统。
  • HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
  • HBase具有"向下提供存储,向上提供运算"的特点,这跟上图就对应起来了,比如Hive on HBase,即HBase为Hive计算提供输入数据
  • HBase数据模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value
  • 从逻辑上讲,HBase将数据按照表、行和列进行存储

3. HBase系统架构图

 
【HBase一】HBase概述
 

4. HBase与HDFS对比

  • HBase和HDFS都是良好的容错性和扩展性,都可以扩展到成百上千个节点
  • HDFS适用于读取的整存整取,即批处理场景
  • HBase适合数据的随机读取,而HDFS不能用于数据随机读取,只用于顺序扫描所有数据
  • HDFS不适合增量数据处理,而HBase适合((只处理新增数据)
  • HDFS不适合增量数据更新(即写操作),而HBase则适合百万级并发写操作

5. HBase表的特点

  • 海量存储: 一个表可以有数十亿行,上百万列
  • 行无固定模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列。这个可排序的主键是rowKey吗?
  • 面向列: 面向列(族)的存储和权限控制,列(族)独立检索
  • 空列: 对于空(null)的列,并不占用存储空间,表可以设计的非常稀疏
  • 数据带有多版本: 每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
  • 数据类型单一: Hbase中的数据都是字符串,没有类型,字符串转换成其他类型需要自己实现

6.行存储 vs 列存储

6.1 行存储


【HBase一】HBase概述
行存储的特点:

  • 数据是按行存储的
  • 没有索引的查询使用大量I/O(因为首先要扫描行,再扫描列。因为行是离散的所以,需要继续IO定位行)
  • 建立索引和物化视图需要花费大量时间和资源
  • 面向查询的需求,数据库必须被大量膨胀才能满足性能要求

 

6.2 列存储


【HBase一】HBase概述
列存储的特点:

  • 数据是按列存储-每一列单独存放
  • 数据即是索引
  • 仅需要访问查询涉及的列-大量降低系统I/O
  • 每一列由一个线程来处理-查询的并发处理(列出通常来说不会很大)
  • 数据类型一致,数据特征相似-高效压缩

 

 

 

 

你可能感兴趣的:(hbase)