forked from dunwu/db-tutorial
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
220 additions
and
2 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
# HBase | ||
|
||
<!-- TOC depthFrom:2 depthTo:3 --> | ||
|
||
- [简介](#简介) | ||
- [基础](#基础) | ||
- [原理](#原理) | ||
- [数据模型](#数据模型) | ||
- [HBase 架构](#hbase-架构) | ||
- [HBase 和 RDBMS](#hbase-和-rdbms) | ||
- [API](#api) | ||
- [附录](#附录) | ||
- [命令行](#命令行) | ||
- [更多内容](#更多内容) | ||
- [扩展阅读](#扩展阅读) | ||
- [参考资料](#参考资料) | ||
|
||
<!-- /TOC --> | ||
|
||
## 简介 | ||
|
||
HBase 是建立在 HDFS 基础上的面向列的分布式数据库。 | ||
|
||
- HBase 参考了谷歌的 BigTable 建模,实现的编程语言为 Java。 | ||
- 它是 Hadoop 项目的子项目,运行于 HDFS 文件系统之上。 | ||
|
||
HBase 适用场景:实时地随机访问超大数据集。 | ||
|
||
在 [CAP 理论](https://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86)中,HBase 属于 CP 类型的系统。 | ||
|
||
## 基础 | ||
|
||
[HBase 维护](hbase-ops.md) | ||
|
||
## 原理 | ||
|
||
### 数据模型 | ||
|
||
HBase 是一个面向列的数据库,在表中它由行排序。 | ||
|
||
HBase 表模型结构为: | ||
|
||
- 表(table)是行的集合。 | ||
- 行(row)是列族的集合。 | ||
- 列族(column family)是列的集合。 | ||
- 列(row)是键值对的集合。 | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164163369.png!zp) | ||
|
||
HBase 表的单元格(cell)由行和列的坐标交叉决定,是有版本的。默认情况下,版本号是自动分配的,为 HBase 插入单元格时的时间戳。单元格的内容是未解释的字节数组。 | ||
|
||
行的键也是未解释的字节数组,所以理论上,任何数据都可以通过序列化表示成字符串或二进制,从而存为 HBase 的键值。 | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164224778.png!zp) | ||
|
||
### HBase 架构 | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164744748.png!zp) | ||
|
||
和 HDFS、YARN 一样,HBase 也采用 master / slave 架构: | ||
|
||
- HBase 有一个 master 节点。master 节点负责将区域(region)分配给 region 节点;恢复 region 节点的故障。 | ||
- HBase 有多个 region 节点。region 节点负责零个或多个区域(region)的管理并相应客户端的读写请求。region 节点还负责区域的划分并通知 master 节点有了新的子区域。 | ||
|
||
HBase 依赖 ZooKeeper 来实现故障恢复。 | ||
|
||
#### Regin | ||
|
||
HBase 表按行键范围水平自动划分为区域(region)。每个区域由表中行的子集构成。每个区域由它所属的表、它所含的第一行及最后一行来表示。 | ||
|
||
**区域只不过是表被拆分,并分布在区域服务器。** | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551165887616.png!zp) | ||
|
||
#### Master 服务器 | ||
|
||
区域分配、DDL(create、delete)操作由 HBase master 服务器处理。 | ||
|
||
- master 服务器负责协调 region 服务器 | ||
- 协助区域启动,出现故障恢复或负载均衡情况时,重新分配 region 服务器 | ||
- 监控集群中的所有 region 服务器 | ||
- 支持 DDL 接口(创建、删除、更新表) | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166513572.png!zp) | ||
|
||
#### Regin 服务器 | ||
|
||
区域服务器运行在 HDFS 数据节点上,具有以下组件 | ||
|
||
- `WAL` - Write Ahead Log 是 HDFS 上的文件。WAL 存储尚未持久存储到永久存储的新数据,它用于在发生故障时进行恢复。 | ||
|
||
- `BlockCache` - 是读缓存。它将频繁读取的数据存储在内存中。至少最近使用的数据在完整时被逐出。 | ||
- `MemStore` - 是写缓存。它存储尚未写入磁盘的新数据。在写入磁盘之前对其进行排序。每个区域每个列族有一个 MemStore。 | ||
- `Hfiles` - 将行存储为磁盘上的排序键值对。 | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166602999.png!zp) | ||
|
||
#### ZooKeeper | ||
|
||
HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。Zookeeper 维护哪些服务器是活动的和可用的,并提供服务器故障通知。集群至少应该有 3 个节点。 | ||
|
||
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166447147.png!zp) | ||
|
||
## HBase 和 RDBMS | ||
|
||
| HBase | RDBMS | | ||
| --------------------------------------------------- | ------------------------------------------ | | ||
| HBase 无模式,它不具有固定列模式的概念;仅定义列族。 | RDBMS 有它的模式,描述表的整体结构的约束。 | | ||
| 它专门创建为宽表。 HBase 是横向扩展。 | 这些都是细而专为小表。很难形成规模。 | | ||
| 没有任何事务存在于 HBase。 | RDBMS 是事务性的。 | | ||
| 它反规范化的数据。 | 它具有规范化的数据。 | | ||
| 它用于半结构以及结构化数据是非常好的。 | 用于结构化数据非常好。 | | ||
|
||
## API | ||
|
||
Java API 归纳总结在这里:[Hbase Java API](hbase-api-java.md) | ||
|
||
## 附录 | ||
|
||
### 命令行 | ||
|
||
HBase 命令行可以参考这里:[HBase 命令行](hbase-cli.md) | ||
|
||
## 更多内容 | ||
|
||
### 扩展阅读 | ||
|
||
- [HBase 命令](hbase-cli.md) | ||
- [HBase 配置](hbase-ops.md) | ||
|
||
### 参考资料 | ||
|
||
#### 官方 | ||
|
||
- [HBase 官网](http://hbase.apache.org/) | ||
- [HBase 官方文档](https://hbase.apache.org/book.html) | ||
- [HBase 官方文档中文版](http://abloz.com/hbase/book.html) | ||
- [HBase API](https://hbase.apache.org/apidocs/index.html) | ||
|
||
#### 文章 | ||
|
||
- [Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf) | ||
- https://mapr.com/blog/in-depth-look-hbase-architecture/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters