modify
This commit is contained in:
		| @@ -77,9 +77,9 @@ | |||||||
| ## 九、Azkaban | ## 九、Azkaban | ||||||
| ## 十、Hbase | ## 十、Hbase | ||||||
|  |  | ||||||
| 1. Hbase基本环境搭建(Standalone /pseudo-distributed mode) | 1. [Hbase基本环境搭建(Standalone /pseudo-distributed mode)](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hbase%E5%9F%BA%E6%9C%AC%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md) | ||||||
|  |  | ||||||
| 2. Hbase系统架构及数据结构 | 2. [Hbase系统架构及数据结构](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%8F%8A%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) | ||||||
| 3. Hbase shell | 3. Hbase shell | ||||||
| 4. Hbase Java Api | 4. Hbase Java Api | ||||||
| 5. Hbase 协处理器 | 5. Hbase 协处理器 | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| # Hbase系统架构及数据结构 | # Hbase系统架构及数据结构 | ||||||
|  |  | ||||||
|  | <nav> | ||||||
| <a href="#一基本概念">一、基本概念</a><br/> | <a href="#一基本概念">一、基本概念</a><br/> | ||||||
|     <a href="#21-Row-Key-行键">2.1 Row Key (行键)</a><br/> |     <a href="#21-Row-Key-行键">2.1 Row Key (行键)</a><br/> | ||||||
|     <a href="#22-Column-Family列族">2.2 Column Family(列族)</a><br/> |     <a href="#22-Column-Family列族">2.2 Column Family(列族)</a><br/> | ||||||
| @@ -22,23 +23,23 @@ | |||||||
|  |  | ||||||
| 一个典型的Hbase Table 表如下: | 一个典型的Hbase Table 表如下: | ||||||
|  |  | ||||||
|  | <div align="center"> <img  src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-webtable.png"/> </div> | ||||||
|  |  | ||||||
| ### 2.1 Row Key (行键) | ### 2.1 Row Key (行键) | ||||||
|  |  | ||||||
|  | Row Key是用来检索记录的主键。访问Hbase Table中的行,只有三种方式: | ||||||
|  |  | ||||||
|  | + 通过单个Row Key访问 | ||||||
|  |  | ||||||
|  | + 通过Row Key的range | ||||||
|  |  | ||||||
| + 全表扫描 | + 全表扫描 | ||||||
|  |  | ||||||
|  | Row Key (行键)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在Hbase内部,Row Key保存为字节数组。存储时,数据按照Row Key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起(位置相关性)。 | ||||||
|  |  | ||||||
|  | 需要注意以下两点: | ||||||
|  |  | ||||||
|  | + 字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整型的自然序,行键必须用0作左填充。 | ||||||
|  |  | ||||||
| + 行的一次读写是原子操作 (不论一次读写多少列)。 | + 行的一次读写是原子操作 (不论一次读写多少列)。 | ||||||
|  |  | ||||||
| @@ -46,7 +47,7 @@ Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应 | |||||||
|  |  | ||||||
| ### 2.2 Column Family(列族) | ### 2.2 Column Family(列族) | ||||||
|  |  | ||||||
|  | hbase表中的每个列(Column),都归属与某个列族。列族是表的schema的一部分(列不是),必须在使用表之前定义。列名都以列族作为前缀。例如`courses:history`,`courses:math`都属于`courses `这个列族。 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -64,13 +65,13 @@ HBase 中的列由列族和列限定符组成,它们由`:`(冒号)字符 | |||||||
|  |  | ||||||
| ### 2.5 Cell | ### 2.5 Cell | ||||||
|  |  | ||||||
|  | Cell是行,列族和列限定符的组合,并包含值和时间戳。 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ### 2.6 Timestamp(时间戳) | ### 2.6 Timestamp(时间戳) | ||||||
|  |  | ||||||
|  | HBase 中通过`row`和`columns`确定的为一个存储单元称为Cell。每个Cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个Cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -78,11 +79,11 @@ HBase 中通过row和columns确定的为一个存贮单元称为cell。每个 ce | |||||||
|  |  | ||||||
| ### 2.1 Regions | ### 2.1 Regions | ||||||
|  |  | ||||||
|  | Hbase Table中的所有行都按照Row Key的字典序排列。HBase Tables 通过行键的范围(row key range)被水平切分成多个Region, 一个Region包含了在start key 和 end key之间的所有行。 | ||||||
|  |  | ||||||
| <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/HBaseArchitecture-Blog-Fig2.png"/> </div> | <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/HBaseArchitecture-Blog-Fig2.png"/> </div> | ||||||
|  |  | ||||||
|  | 每个表一开始只有一个Region,随着数据不断插入表,Region不断增大,当增大到一个阀值的时候,Region就会等分会两个新的Region。当Table中的行不断增多,就会有越来越多的Region。 | ||||||
|  |  | ||||||
| <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-region-splite.png"/> </div> | <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-region-splite.png"/> </div> | ||||||
|  |  | ||||||
| @@ -92,11 +93,11 @@ Region是Hbase中**分布式存储和负载均衡的最小单元**。最小单 | |||||||
|  |  | ||||||
| ### 2.2 Region Server | ### 2.2 Region Server | ||||||
|  |  | ||||||
|  | Region Server在HDFS DataNode上运行。 | ||||||
|  |  | ||||||
|  | <div align="center"> <img  src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-hadoop.png"/> </div> | ||||||
|  |  | ||||||
|  | Region Server存取一个子表时,会创建一个 Region 对象,然后对表的每个列族 (Column Family) 创建一个 Store 实例,每个 Store 都会有 0 个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个 HFile,HFile 就是实际的存储文件。因此,一个 Region 有多少个列族就有多少个 Store。 | ||||||
|  |  | ||||||
| Region Server还具有以下组件: | Region Server还具有以下组件: | ||||||
|  |  | ||||||
| @@ -111,17 +112,17 @@ Region Server还具有以下组件: | |||||||
|  |  | ||||||
| ### 3.1 系统架构 | ### 3.1 系统架构 | ||||||
|  |  | ||||||
|  | HBase系统遵循Master/Salve架构,由三种不同类型的组件组成。 | ||||||
|  |  | ||||||
| **Zookeeper** | **Zookeeper** | ||||||
|  |  | ||||||
|  | 1. 保证任何时候,集群中只有一个Master | ||||||
|  |  | ||||||
| 2. 存贮所有Region的寻址入口 | 2. 存贮所有Region的寻址入口 | ||||||
|  |  | ||||||
| 3. 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master | 3. 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master | ||||||
|  |  | ||||||
|  | 4. 存储Hbase的schema,包括有哪些Table,每个Table有哪些Column Family | ||||||
|  |  | ||||||
| **Master** | **Master** | ||||||
|  |  | ||||||
| @@ -153,7 +154,7 @@ HBase系统遵循master/salve架构,由三种不同类型的组件组成。 | |||||||
|  |  | ||||||
| + 如果Region Server或主HMaster未能发送心跳,则会话过期并删除相应的临时节点。这会触发定义在该节点上的Watcher事件,使得Region Server或备用Region Server得到通知。 | + 如果Region Server或主HMaster未能发送心跳,则会话过期并删除相应的临时节点。这会触发定义在该节点上的Watcher事件,使得Region Server或备用Region Server得到通知。 | ||||||
|  |  | ||||||
|  | <div align="center"> <img  src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/HBaseArchitecture-Blog-Fig5.png"/> </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -161,11 +162,11 @@ HBase系统遵循master/salve架构,由三种不同类型的组件组成。 | |||||||
|  |  | ||||||
| ### 4.1 写入数据的流程 | ### 4.1 写入数据的流程 | ||||||
|  |  | ||||||
|  | 1. client向Region server提交写请求 | ||||||
|  |  | ||||||
|  | 2. Region server找到目标Region | ||||||
|  |  | ||||||
|  | 3. Region检查数据是否与schema一致 | ||||||
|  |  | ||||||
| 4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本 | 4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本 | ||||||
|  |  | ||||||
| @@ -193,7 +194,7 @@ HBase系统遵循master/salve架构,由三种不同类型的组件组成。 | |||||||
|  |  | ||||||
| 注:META 表是Hbase中一张特殊的表,它保存了Hbase中所有数据表的Region位置信息,ZooKeeper存储着META 表的位置。 | 注:META 表是Hbase中一张特殊的表,它保存了Hbase中所有数据表的Region位置信息,ZooKeeper存储着META 表的位置。 | ||||||
|  |  | ||||||
|  | <div align="center"> <img  src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/HBaseArchitecture-Blog-Fig7.png"/> </div> | ||||||
|  |  | ||||||
| > 更为详细读取数据流程参考: | > 更为详细读取数据流程参考: | ||||||
| > | > | ||||||
|   | |||||||
| @@ -25,6 +25,12 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### 五、Hbase | ||||||
|  |  | ||||||
|  | 1. [Hbase基本环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hbase%E5%9F%BA%E6%9C%AC%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA.md) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ### 五、Linux | ### 五、Linux | ||||||
|  |  | ||||||
| + [虚拟机静态IP配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/虚拟机静态IP配置.md) | + [虚拟机静态IP配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/虚拟机静态IP配置.md) | ||||||
|   | |||||||
| @@ -2,21 +2,8 @@ | |||||||
|  |  | ||||||
| <nav> | <nav> | ||||||
| <a href="#一安装前置条件说明">一、安装前置条件说明</a><br/> | <a href="#一安装前置条件说明">一、安装前置条件说明</a><br/> | ||||||
|     <a href="#11-JDK版本说明">1.1 JDK版本说明</a><br/> |  | ||||||
|     <a href="#12-standalone-模式和伪集群模式的区别">1.2 standalone 模式和伪集群模式的区别</a><br/> |  | ||||||
| <a href="#二Standalone-模式">二、Standalone 模式</a><br/> | <a href="#二Standalone-模式">二、Standalone 模式</a><br/> | ||||||
|     <a href="#21-下载并解压">2.1 下载并解压</a><br/> |  | ||||||
|     <a href="#22-配置环境变量">2.2 配置环境变量</a><br/> |  | ||||||
|     <a href="#23-进行Hbase相关配置">2.3 进行Hbase相关配置</a><br/> |  | ||||||
|     <a href="#24-启动Hbase">2.4 启动Hbase</a><br/> |  | ||||||
|     <a href="#25-验证启动是否成功">2.5 验证启动是否成功</a><br/> |  | ||||||
| <a href="#三伪集群模式安装Pseudo-Distributed">三、伪集群模式安装(Pseudo-Distributed)</a><br/> | <a href="#三伪集群模式安装Pseudo-Distributed">三、伪集群模式安装(Pseudo-Distributed)</a><br/> | ||||||
|     <a href="#31-Hadoop单机伪集群安装">3.1 Hadoop单机伪集群安装</a><br/> |  | ||||||
|     <a href="#32-Hbase版本选择">3.2 Hbase版本选择</a><br/> |  | ||||||
|     <a href="#33-软件下载解压">3.3 软件下载解压</a><br/> |  | ||||||
|     <a href="#34-配置环境变量">3.4 配置环境变量</a><br/> |  | ||||||
|     <a href="#35-进行Hbase相关配置">3.5 进行Hbase相关配置</a><br/> |  | ||||||
|     <a href="#36-验证启动是否成功">3.6 验证启动是否成功</a><br/> |  | ||||||
| </nav> | </nav> | ||||||
|  |  | ||||||
| ## 一、安装前置条件说明 | ## 一、安装前置条件说明 | ||||||
| @@ -119,7 +106,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201 | |||||||
|  |  | ||||||
| 验证方式二:访问Hbase Web UI 页面,默认端口为`16010` | 验证方式二:访问Hbase Web UI 页面,默认端口为`16010` | ||||||
|  |  | ||||||
| <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-web-ui.png"/> </div> | <div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-web-ui.png"/> </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -127,21 +114,21 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201 | |||||||
|  |  | ||||||
| ### 3.1 Hadoop单机伪集群安装 | ### 3.1 Hadoop单机伪集群安装 | ||||||
|  |  | ||||||
| 因为上面的单机版本采用了本地文件系统作为存储,为了演示Hbase支持的多种存储方式,这里我们采用HDFS作为Hbase的存储方案。需要预先安装Hadoop,Hadoop安装方式见本仓库[Hadoop单机伪集群搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop单机版本环境搭建.md) | 这里我们采用HDFS作为Hbase的存储方案,需要预先安装Hadoop。(如果你没有安装Hadoop,依然可以按照Standalone 模式,采用本地文件系统作为存储方案) | ||||||
|  |  | ||||||
| > 需要说明的是:Hbase即使是伪集群安装模式依然可以采用本地文件系统作为存储。 |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | > [Hadoop单机伪集群搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop单机版本环境搭建.md) | ||||||
|  |  | ||||||
| ### 3.2 Hbase版本选择 | ### 3.2 Hbase版本选择 | ||||||
|  |  | ||||||
| Hbase的版本必须要与Hadoop的版本兼用,不然会发生各种Jar包冲突,由于我们Hadoop采用的版本为`hadoop-2.6.0-cdh5.15.2`,所以这里保持CDH版本一致,我们选择的Hbase版本为`hbase-1.2.0-cdh5.15.2` ,Hbase 1.2 的安装需要依赖JDK 1.7+ 。故所有软件版本如下: | Hbase的版本必须要与Hadoop的版本兼容,不然会发生各种Jar包冲突。 | ||||||
|  |  | ||||||
| + **hadoop 版本**: hadoop-2.6.0-cdh5.15.2 | 由于我们Hadoop采用的版本为`hadoop-2.6.0-cdh5.15.2`,所以这里保持CDH版本一致,我们选择的Hbase版本为`hbase-1.2.0-cdh5.15.2` ,Hbase 1.2 的安装需要依赖JDK 1.7+ 。所有软件版本如下: | ||||||
|  |  | ||||||
| + **hbase 版本**: hbase-1.2.0-cdh5.15.2 | + hadoop 版本: hadoop-2.6.0-cdh5.15.2 | ||||||
|  |  | ||||||
| + **JDK 版本**:JDK 1.8 | + hbase 版本: hbase-1.2.0-cdh5.15.2 | ||||||
|  |  | ||||||
|  | + JDK 版本:JDK 1.8 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -236,4 +223,4 @@ hadoop001 | |||||||
|  |  | ||||||
| 验证方式二:访问Hbase Web UI 界面,需要注意的是1.2 版本的Hbase的访问端口为`60010` | 验证方式二:访问Hbase Web UI 界面,需要注意的是1.2 版本的Hbase的访问端口为`60010` | ||||||
|  |  | ||||||
| <div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-60010.png"/> </div> | <div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-60010.png"/> </div> | ||||||
		Reference in New Issue
	
	Block a user