HBase介绍
- 概述
- HBase是什么?
HBase是一种NOSQL数据库,是基于Apache Hadoop的、分布式的、多版本的、面向列的数据库,能够对大型数据提供随机、实时的读写访问。
-
- 特点
- 横向扩展性强
- 支持很高的写吞吐
- 有良好的随机读性能
- 高可用性,故障可恢复性
- 错误隔离性。一个结点的错误不会影响到其它结点,磁盘故障只会对相应的小规模的数据产生影响。
- 可在廉价PC Server搭建大规模结构化存储集群
- 适用场景和实例
- 场景
- 大表,数十亿行、数百万列的数据表
- 大数据量存储,数据需要长久保存,且量会持续增长到比较大的场景,能达到TB或PB的数据
- 瞬间写入量很大,数据库不好支撑或需要很高成本支撑的场景
- 查询场景简单,检索条件较少
- 实例
- Facebook:新实时消息系统(Social Inbox),包括email、IM、SMS
- 淘宝:购买历史记录、实时日志收集、数据实时监控、广告效果实时反馈等
- 与Hadoop其它系统关系
Hadoop起源于开源的网络搜索引擎Apache Nutch。狭义的讲,Hadoop主要指MapReduce和HDFS,但是,Hadoop这个名字也用于一组相关项目的统称,这些相关项目都是用这个基础平台进行分布式计算和海量数据处理。其关系如下:
HBase位于结构化存储层,围绕HBase,各部件对HBase的支持情况:
Hadoop部件 |
作用 |
HDFS |
高可靠的底层存储支持 |
MapReduce |
高性能的计算能力 |
Zookeeper |
稳定服务和failover机制 |
Pig&Hive |
高层语言支持,便于数据统计 |
Sqoop |
提供RDBMS数据导入,便于传统数据库向HBase迁移 |
-
- 运行模式
HBase有两种运行模式:单机模式和分布式模式,其中分布式模式又分为伪分布式模式和完全分布式模式。
- 单机模式
使用本地文件系统;所有的服务和zooKeeper都运作在一个JVM中。
- 分布式模式
使用 Hadoop Distributed File System (HDFS)。
伪分布式模式进程运行在一台机器上,但不是一个JVM。
完全分布式模式服务被分布在各个节点上。
-
- 访问方式
- Native Java API:最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
- HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用
- Thrift Gateway:利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
- REST Gateway:支持REST 风格的Http API访问HBase, 解除了语言限制
- Pig:可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
- Hive:可以使用类似SQL语言来访问HBase
- 分布式HBase系统架构
- 总体架构
分布式的HBase系统应用架构如下:
- Zookeeper
为客户端提供访问入口,存贮所有Region的寻址入口;
选举HBase集群中的master,确保任何时候,只有一个master;
实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master;
存储Hbase的schema,包括有哪些table,每个table有哪些column family。
- HBase
Hbase的服务器体系结构遵从简单的主从服务器架构,由Hregion服务器群和HBase Master主服务器构成。在整个架构中负责数据的读写、调度等。
Master主要负责Table和Region的管理工作;RegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据
- Hadoop HDFS
Hadoop文件系统也是主从架构,由唯一一个目录节点和数个数据节点组成。在整个架构中负责数据的物理存储。
- Client
Client包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。
client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低。
-
- HBase
- 数据模型
- HBase
HBase以表的方式存储数据。表是由行和列构成的,列从属于某一个列族(column family)。行和列的交叉点称之为cell,cell是版本化的。cell的内容就是数据,cell中的数据是没有类型的,全部是字节码形式存贮,是不可分割的字节数组。
-
-
-
- 逻辑视图
-
-
下表展现一个名为webtable表的逻辑视图,包含两个列族(column family):contents和anchor。anchor有两个列 (anchor:cssnsi.com, anchor:my.look.ca),contents仅有一列(contents:html)。
Row Key |
Time Stamp |
ColumnFamily contents |
ColumnFamily anchor |